最近我一直在关注如何使用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));
}
}
我会对一些提示感到非常高兴。
答案 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");
}