许多类似的问题,但这些解决方案都没有对我有用。我有一个扩展MondoRepository的Repository接口。
public interface Repository extends MongoRepository<Subject, String> {
Subject findByName(String name);
}
这是主题课
public class Subject {
@Id
private String id;
private String name;
public String getName() {
return this.name;
}
}
上面的两个文件位于/db
包
如果我在我的Application类中自动装配Repository,我就能正确使用它。
@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);
}
}
我的Application
课程位于根文件夹/
中。
基本上,这没有给我任何错误。但是,如果我在像这样的服务类中自动启动它
public class Service {
@Autowired
private Repository repository;
public String get() {
repository.findByName("hello");
return "";
}
}
这给了我repository.findByName()
行中的空指针异常。
我的Service
课程位于/service
个包中。
为什么它在应用程序类中的行为不一样? 为了能够在服务类中使用存储库,我应该做些什么?
我尝试了什么 -
我尝试用Service
注释我的@Service, @Repository, @Component
课程,但没有一个工作。
我尝试为@ComponentScan(basePackageClasses = Service.name)
课程添加语音Application
,但它没有用。
任何解决方法都很好 -
答案 0 :(得分:1)
也许是因为存储库或服务还没有被春天扫描过?你注释为@service,@存储库还是@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);
}
}
和
@org.springframework.stereotype.Service
public class Service {
@Autowired
private Repository repository;
public String get() {
repository.findByName("hello");
return "";
}
}