我有一个java spring项目。我看到初始化spring项目的一种方法是在main方法中使用这个代码。
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(Config.class);
ctx.scan("com.example.db.app");
ctx.refresh();
是否可以将其保留在主方法之外,然后制作一个这个项目的jar。将它作为依赖项添加到其他项目的pom.xml中,并调用从那里初始化spring工件的方法。
我试过这样做。我收到了一个错误。
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'itemInformationRepositoryService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void com.example.db.app.service.ItemInformationRepositoryService.setItemInformationRepositoryService(com.example.db.app.repository.ItemInformationRepository); nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.example.db.app.repository.ItemInformationRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
答案 0 :(得分:0)
异常消息说明:
找不到[com.example.db.app.repository.ItemInformationRepository]类型的限定bean用于依赖:期望至少有一个bean符合此依赖关系的autowire候选者。
这意味着类com.example.db.app.repository.ItemInformationRepository
不在Spring上下文中。也许你期望Spring发现这个类是因为你指示Spring扫描com.example.db.app
?根据Javadocs AnnotationConfigApplicationContext.scan()
...
在指定的基础包中执行扫描。
@param basePackages包以检查带注释的类
因此,为了让Spring发现com.example.db.app.repository.ItemInformationRepository
,您必须:
org.springframework.stereotype.Component
对其进行注释,以便scan()
Config.class
相同的方式注册,例如ctx.register(ItemInformationRepository.class);