像这样的许多类似问题,但没有一个解决方案对我有用。我有一个扩展 MondoRepository 的存储库接口。
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
包 中
如果我在我的应用程序类中自动装配存储库,我就可以正确使用它。
@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
package 中。
为什么它的行为与应用程序类中的不同?为了能够在服务类中使用存储库,我应该做些什么不同的事情?
我尝试过的-
我尝试用 注释我的Service
课程@Service, @Repository, @Component
,但没有一个有效。
@ComponentScan(basePackageClasses = Service.name)
我尝试为班级添加annonation Application
,但没有用。
任何解决方法也可以 -