【发布时间】:2018-02-20 01:41:59
【问题描述】:
最近我一直在关注如何使用 Spring Boot 在内存 H2 数据库中持久化数据的指南:
- 向导:https://spring.io/guides/gs/accessing-data-jpa/
- 源代码:https://github.com/spring-guides/gs-accessing-data-jpa/
在其中,首先定义一个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 对其进行注释,然后在customerrepository-field 上使用@Autowired 将Foo 制作成一个spring 托管bean。 Spring依赖注入:-)
-
非常感谢您的帮助!但是,当我打电话给
storeCustomer时,我得到一个NullPointerException... -
@dwightschrute 你的包结构是什么样的?默认情况下,Spring Boot 将在您定义 @SpringBootApplication 的位置开始递归查找包。因此,请确保包含 Foo 的包是 Main 类的子类。
-
确实没有包结构,所有源文件都是根目录下的兄弟。
Application.java的main方法用@SpringBootApplication注解,Foo.java在同一个包中。 -
包如何成为类的子类?
标签: java spring spring-boot spring-data-jpa h2