我试图在Spring启动应用程序中从不同的包加载bean。这是我的主要课程,它位于 com.xyz.app 包中:
Application.java :
@SpringBootApplication(scanBasePackages = { "com.xyz.app.repository" })
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
ConfigurableApplicationContext context =
SpringApplication.run(Application.class, args);
context.getBean(MyInterfaceRepository.class).loadData();
}
界面 MyInterfaceRepository.java 位于 com.xyz.app.repository 包内,并且定义如下:
@RepositoryRestResource(collectionResourceRel = "aas", path = "aas")
public interface MyInterfaceRepository extends MongoRepository<MyClass, Long>,
MyCustomInterface {
...
}
然后,我还有一个 MyInterfaceRepositoryImpl.java ,它位于 com.xyz.app.repository ,提供 MyCustomInterface.java 的实现,它也存在于 com.xyz.app.repository 中
启动我的应用程序我得到以下内容:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.xyz.app.repository.MyInterfaceRepository] is defined
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:372)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:332)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1066)
at com.xyz.app.Application.main(Application.java:60)
我已经检查了,确实如果我把 MyInterfaceRepository.java 和 MyInterfaceRepositoryImpl.java 放在同一个地方打包为 Application.java , com.xyz.app ,而不是它的工作原理。
似乎Spring无法从 Application.java 所在的包中加载bean。
此外,我尝试用以下内容替换 @SpringBootApplication :
@Configuration
@EnableAutoConfiguration
@ComponentScan({"com.xyz.app.repository"})
同样的问题..有什么想法吗?
答案 0 :(得分:0)
如果您使用的是spring mongodb,则无需使用注释:@RepositoryRestResource(collectionResourceRel = "aas", path = "aas")
您还可以在@Autowired
中使用MyInterfaceRepository
。
答案 1 :(得分:0)
在您的应用程序类/主类上添加@EnableMongoRepositories。你应该有这样的东西:
@SpringBootApplication(scanBasePackages = {"com.xyz.app"})
@EnableMongoRepositories(basePackages = {"com.xyz.app.repository"}, repositoryBaseClass = MyInterfaceRepositoryImpl.class)
public class Application extends SpringBootServletInitializer {
...
}
有关注释的详细信息,请参阅EnableMongoRepositories。