有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何获取Crudepository实例?

最近,我一直遵循以下指南,介绍如何使用Spring Boot在内存H2数据库中持久化数据:

在它中,首先定义一个CustomerEntity类,然后定义一个CustomerRepository接口。然后,在主类中,进行了大量的注释魔术,这使我们能够简单地“拥有”一个CustomerRepository实例,该实例可用于将数据持久化到数据库、检索数据等

这很好,但是,我需要在主类之外的另一个类中使用这样的CustomerRepository实例。由于本教程没有揭示使它在主类中可用的魔力,我不知道如何在我需要它的类中实现它

我几乎一整天都在试图弄明白这一点,但我只是在一大堆文章中迷失了方向,这些文章都在试图解释哪个Spring注释做了什么,我现在真的筋疲力尽了

我想这样做:

public class Foo {

  private CustomerRepository repo;

  // ...

  public void storeCustomer(String firstName, String lastName) {
    this.repository.save(new Customer(firstName, lastName));
  }

}

我很乐意得到一些提示


共 (2) 个答案

  1. # 1 楼答案

    这里有一个例子

    @Component
    public class Foo{
    
      @Autowired
        private CustomerRepository repo;
    
      // ...
    
      public void storeCustomer(String firstName, String lastName) {
        this.repository.save(new Customer(firstName, lastName));
      }
    
    }
    

    如果需要尝试,可以使用“CommandLineRunner”

    @Bean
    public CommandLineRunner myRunner(Foo myFooService){
    
      myFooService.storeCustomer("name","lastname");
    
    }
    
  2. # 2 楼答案

    您需要自动连接CustomerRepository对象,还需要从控制器自动连接Foo对象Foo对象

    public class Foo {
    
    @Autowire
    private CustomerRepository repo;
    
      public void storeCustomer(String firstName, String lastName) {
      this.repo.save(new Customer(firstName, lastName));
      } 
    }
    

    您需要将Foo对象从controller/restcontroller自动连接到调用storeCustomer方法

    @Controller
    public class CustomerController{
    
      @Autowired
      Foo obj;
      @RequestMapping(method=RequestMethod.GET,value="addNewCustomer")
       public String addnewCustomer(){      
          obj.storeCustomer("firstname","lastname");
          return "";
    
       }
    }
    

    并使用@Configuration在任何类中定义自动连线bean

    @Configuration
    public class AppConfig {
      @Bean
      public Foo obj(){
          return new Foo();
      }
      @Bean
      public CustomerRepository repo(){
          return new CustomerRepository();
      }
    }