如何获得CrudRepository实例?

时间:2017-09-11 18:20:41

标签: java spring spring-boot spring-data-jpa h2

最近我一直在关注如何使用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 个答案:

答案 0 :(得分: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));
  } 
}

你需要从控制器/ restcontroller自动装配Foo对象以调用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();
  }
}

答案 1 :(得分:0)

这是一个例子

@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");

}