Mongodb Autowired mongo存储库对象在应用程序类之外为null
很多类似的问题都是这样的,但没有一个解决方案对我有效。我有一个扩展MondoRepository的存储库接口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
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 "";
}
}