Java 为什么在自动连接扩展MongoRepository的接口时会出现NullPointerException?

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

我正在尝试编写一个访问层类,该类使用Spring dataMongoDB获取数据,但我有以下问题: 我有以下界面:

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注释。而且你的
测试
类应该有注释