2013-04-08 31 views
1

我很新的春天是好的;)引导@Configuration

我有一个共享的模块,我会打电话给“核心”和一对夫妇的项目,这取决于核心。这些子项目有spring/app-context.xml文件,并且在它们被执行的环境中,spring被另一个框架初始化。

在“核心”的项目,我想使用定义一些单身人士服务的@Configuration方法:然后

@Configuration 
public class AppConfig 
{ 
    @Bean 
    public MyService myService() 
    { 
     return new MyServiceImpl(); 
    } 
} 

核心封装在一个罐子,包括在分项目的类路径。

如何引导核心模块的服务,使它们可用于子项目中的@Autowire?

编辑:

我遇到的错误是:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [package.MyService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@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" /> 
+0

...或者我并不完全依赖于使用@Configuration方法,但是我必须能够在核心模块中配置beans/services,而不必在子项目中重新配置它们 – pstanton 2013-04-08 03:02:29

+0

您是否采取了看看log4j日志?在DEBUG级别日志记录中,您应该能够看到更多关于为什么找到“AppConfig”而不是“MyService”的信息。 – 2013-04-08 04:08:27

+0

嗨尼古拉斯,谢谢你的提示。打开弹簧日志,我可以看到平台在我的AppConfig上抛出了一个ClassNotFound,这意味着在初始化Spring应用程序上下文之前,容器尚未加载模块的完整类路径。我将不得不接受平台的供应商。 – pstanton 2013-04-08 09:51:49

回答

1

如果你看一看的JavaDoc,它说明了一切:

Via Spring XML

As an alternative to registering @Configuration classes directly against an AnnotationConfigApplicationContext, @Configuration classes may be declared as normal definitions within Spring XML files:

<beans> 
    <context:annotation-config/> 
    <bean class="com.acme.AppConfig"/> 
</beans> 

听起来好像只是包括@Configuration类作为一个bean到你的XML配置将它捡起来。

除此之外,您还应该能够通过component-scan获取课程,因为@Configuration的元注释为@Component

+0

感谢您的帮助,但我已经尝试了这两种方法。请参阅编辑。 – pstanton 2013-04-08 03:58:57

+0

那么,这是直接从文档,所以我认为它应该工作。那么它不起作用呢?你有例外吗?你的类路径设置是否正确?另外,我没有看到编辑。 – 2013-04-08 04:02:11

+0

正在编辑,thx。 – pstanton 2013-04-08 04:03:32

相关问题