我很高兴能成为一个好人;)
我有一个共享模块,我称之为“核心”和一些依赖于核心的项目。子项目有spring/app-context.xml
个文件,在执行的环境中,spring由另一个框架启动。
在“核心”项目中,我想使用@Configuration方法定义一些单例服务:
@Configuration
public class AppConfig
{
@Bean
public MyService myService()
{
return new MyServiceImpl();
}
}
然后将核心打包在一个jar中,并包含在子项目的类路径中。
如何引导核心模块的服务,以便它们可用于子项目中的@Autowire?
修改
我遇到的错误是:
org.springframework.beans.factory.NoSuchBeanDefinitionException:没有 找到依赖的[package.MyService]类型的匹配bean: 预计至少有1个豆有资格成为autowire候选人 这种依赖。依赖注释: {@ org.springframework.beans.factory.annotation.Autowired(所需=真)}
我已尝试过以下各项(仅限于此):
<context:component-scan base-package="package" />
<import resource="classpath*:spring/core-context.xml" /><!-- defined in core.jar with MyService as a bean -->
<bean class="package.AppConfig" />
但只将其添加到子项目的app-context.xml似乎可以解决错误:
<bean id="MyService" class="package.MyServiceImpl" />
答案 0 :(得分:1)
如果您看一下JavaDoc,就会说明一切:
通过Spring XML
作为直接针对AnnotationConfigApplicationContext注册@Configuration类的替代方法,可以将@Configuration类声明为Spring XML文件中的常规定义:
<beans>
<context:annotation-config/>
<bean class="com.acme.AppConfig"/>
</beans>
听起来简单地将@Configuration
类作为bean包含在你的xml配置中就会把它拿起来。
除此之外,您还应该可以通过component-scan
选择课程,因为@Configuration
的元注释为@Component
。