Java 为什么在自动连接扩展MongoRepository的接口时会出现NullPointerException?
我正在尝试编写一个访问层类,该类使用Spring data从MongoDB获取数据,但我有以下问题: 我有以下界面:Java 为什么在自动连接扩展MongoRepository的接口时会出现NullPointerException?,java,spring,spring-boot,spring-data-mongodb,Java,Spring,Spring Boot,Spring Data Mongodb,我正在尝试编写一个访问层类,该类使用Spring data从MongoDB获取数据,但我有以下问题: 我有以下界面: public interface BlogDataRepository extends MongoRepository<Article, String> { public Article findArticleByName(String name); } 最后是一个主要类: @EnableAutoConfiguration public class Test
public interface BlogDataRepository extends MongoRepository<Article, String> {
public Article findArticleByName(String name);
}
最后是一个主要类:
@EnableAutoConfiguration
public class Test implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(Test.class, args);
}
public void run(String... args) throws Exception {
BlogDataAccessLayer layer = new BlogDataAccessLayer();
Article article = new Article("test", "first article");
layer.addArticle(article);
}
}
每次尝试运行应用程序时,我都会从位于BlogDataAccessLayer
的dataRepository
中获得一个NullPointerExeption
我不明白为什么dataRepository
不是自动连线的。如果我在Test
中移动dataRepository
,它会工作
有人能解释我为什么会有这种行为吗?你需要自动连线
BlogDataAccessLayer
,而不是实例化。然后,只有该类中的BlogDataRepository
自动连线。您需要自动连线BlogDataAccessLayer
,而不是实例化。然后在该类中只有<代码> BlogDataRepository <代码>自动生成。 < p>我将从头到底查看代码,首先要考虑的是在数据访问层中使用注释,在这种情况下,<代码> BlogDataRepository < /代码>接口应该用这个刻板注释注释。
在领域驱动设计的意义上,我们应该通过服务层访问存储库层。因此,在您的情况下,BlogDataAccessLayer
充当服务层,在这种情况下,@EnableAutoConfiguration
是冗余的,在Spring echo系统中,服务层bean应该用注释进行注释
代码的最后一个也是最重要的部分,spring boot@EnableAutoConfiguration
不会扫描类路径中的bean,您应该将其添加到主类中,在您的示例中是Test
类
请注意,在SpringBoot中,将主类放在根包中,将其他类放在它们特定的包中是一个很好的实践。例如,这是一个很好的实践:
org->Application.java //Test
org.service->FooService.java // BlogDataAccessLayer
org.repository->FooRepository // BlogDataRepository
如果您想在客户机类中使用bean,那么应该将它们注入。因此,在您的示例中,使用
new
关键字实例化BlogDataAccessLayer
应该替换为spring注释。另外,您的<代码>测试类应该有注释。 < P>我将从上到下回顾您的代码,首先要考虑的是在数据访问层中使用注释,在这种情况下,<代码> BlogDataRepository < /C>接口应该用这个刻板注释注释。
在领域驱动设计的意义上,我们应该通过服务层访问存储库层。因此,在您的情况下,BlogDataAccessLayer
充当服务层,在这种情况下,@EnableAutoConfiguration
是冗余的,在Spring echo系统中,服务层bean应该用注释进行注释
代码的最后一个也是最重要的部分,spring boot@EnableAutoConfiguration
不会扫描类路径中的bean,您应该将其添加到主类中,在您的示例中是Test
类
请注意,在SpringBoot中,将主类放在根包中,将其他类放在它们特定的包中是一个很好的实践。例如,这是一个很好的实践:
org->Application.java //Test
org.service->FooService.java // BlogDataAccessLayer
org.repository->FooRepository // BlogDataRepository
如果您想在客户机类中使用bean,那么应该将它们注入。因此,在您的示例中,使用new
关键字实例化BlogDataAccessLayer
应该替换为spring注释。而且你的测试
类应该有注释