1

我对春天很陌生;)

我有一个共享模块,我称之为“核心”和几个依赖于核心的项目。子项目有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 个 bean 有资格作为此依赖项的自动装配候选者。依赖注解:{@org.springframework.beans.factory.annotation.Autowired(required=true)}

我已经尝试了以下每一项(独家):

<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" />
4

1 回答 1

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

于 2013-04-08T03:45:19.040 回答