从子项目引导@Configuration到app-context.xml

时间:2013-04-08 02:30:16

标签: java spring

我很高兴能成为一个好人;)

我有一个共享模块,我称之为“核心”和一些依赖于核心的项目。子项目有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" />

1 个答案:

答案 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