Java 如何获得一个crudepository实例?
最近,我一直遵循以下指南,介绍如何使用Spring Boot在内存H2数据库中持久化数据:Java 如何获得一个crudepository实例?,java,spring,spring-boot,spring-data-jpa,h2,Java,Spring,Spring Boot,Spring Data Jpa,H2,最近,我一直遵循以下指南,介绍如何使用Spring Boot在内存H2数据库中持久化数据: 指南: 源代码: 在其中,首先定义一个CustomerEntity类,然后定义一个CustomerRepository接口。然后,在主类中,进行了大量的注释魔术,这使我们能够简单地“拥有”一个CustomerRepository实例,该实例可用于将数据持久化到数据库,检索数据,等等 这很好,但是,我需要在主类之外的另一个类中使用这样一个CustomerRepository实例。由于本教程没有揭示使它在
- 指南:
- 源代码:
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));
}
}
我很乐意得到一些提示。这里有一个例子
@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");
}
您需要自动连接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();
}
}
您需要通过使用@Component对Foo进行注释,然后在customerrepository字段上使用@Autowired,将Foo变成一个spring管理的bean。Spring依赖注入:-)非常感谢您的帮助!然而,当我调用
storeCustomer
时,我得到一个NullPointerException
。@dwightschrute您的包结构是什么样子的?默认情况下,SpringBoot将从您定义的@SpringBootApplication开始递归地查看包。因此,请确保包含Foo的包是主类的子类。实际上没有包结构,所有源文件都是根目录中的同级Application.java
有一个用@SpringBootApplication
注释的main方法,Foo.java
在同一个包中。包怎么可能是类的子类?