Mongodb Autowired mongo存储库对象在应用程序类之外为null

Mongodb Autowired mongo存储库对象在应用程序类之外为null,mongodb,spring-boot,autowired,mongorepository,Mongodb,Spring Boot,Autowired,Mongorepository,很多类似的问题都是这样的,但没有一个解决方案对我有效。我有一个扩展MondoRepository的存储库接口 public interface Repository extends MongoRepository<Subject, String> { Subject findByName(String name); } 上面两个文件位于/db包中 如果我在我的应用程序类中自动连接存储库,我就能够正确地使用它 @SpringBootApplication @Configura

很多类似的问题都是这样的,但没有一个解决方案对我有效。我有一个扩展MondoRepository的存储库接口

public interface Repository extends MongoRepository<Subject, String> {
    Subject findByName(String name);
}
上面两个文件位于
/db
包中

如果我在我的应用程序类中自动连接存储库,我就能够正确地使用它

@SpringBootApplication
@Configuration
@EnableAutoConfiguration
@EnableMongoRepositories(basePackageClasses=Repository.class )
public class Application implements CommandLineRunner{

@Bean
public Service service() {
    return new Service();
}

@Autowired
private Repository repository;

@Override
public void run(String... args) throws Exception {

    repository.save(new Subject());

    Subject subject = repository.findByName("hello");

}

public static void main(String[] args) {

    SpringApplication.run(Application.class, args);
}
}
我的
应用程序
类位于根文件夹
/

基本上,这没有给我错误。但是如果我在这样的服务类中自动连接它

public class Service {

@Autowired
private Repository repository;

public String get() {
    repository.findByName("hello");

    return "";
}
}
这在
repository.findByName()
行中给了我一个空指针异常。 我的
服务
类在
/Service
包中

为什么它的行为与应用程序类中的行为不同? 为了能够在服务类中使用存储库,我应该做些什么

我所尝试的-
我试着用
@Service、@Repository、@Component
注释我的
服务
类,但它们都不起作用

我尝试为
应用程序
类添加注释
@ComponentScan(basePackageClasses=Service.name)
,但没有成功


任何解决方法都很好-

可能是因为spring没有扫描存储库或服务?您是否已注释为@service、@repository或@component

这些对我来说很有用:

@SpringBootApplication
@EnableMongoRepositories
public class DemoApplication implements CommandLineRunner{

    @Autowired
    private Service service;


    @Override
    public void run(String... args) throws Exception {

        String subject = service.get();
        System.out.println("Hola" + subject);
    }

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}


您的套餐是如何设置的?您的
服务
类是否位于与
应用程序和
存储库
类不同的打包结构中?是的,
服务
类位于不同的打包结构中<代码>存储库
主题
类位于
db
包中,
服务
服务
包中,而
应用程序
类在包外。您可以使用
@Service
注释对
服务
进行注释,如果
应用程序
类位于根级包中,则应拾取您的注释。我尝试了
@Service
注释,它不起作用。仍然是相同的NullPointerException添加
@ComponentScan(服务包)
应用程序的注释
类分别尝试了所有三种注释,但均无效。添加了我对
应用程序
类的所有注释,即使这样也不起作用。
@SpringBootApplication
@EnableMongoRepositories
public class DemoApplication implements CommandLineRunner{

    @Autowired
    private Service service;


    @Override
    public void run(String... args) throws Exception {

        String subject = service.get();
        System.out.println("Hola" + subject);
    }

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
@org.springframework.stereotype.Service
public class Service {
    @Autowired
    private Repository repository;

    public String get() {
        repository.findByName("hello");

        return "";
    }
}