2013-04-04 57 views
1

,我发现了以下内容:Spring上下文扫描行为

2013-03-27 18:51:54,944 ERROR pringframework.web.context.ContextLoader: 227 - Context initialization failed 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'exporter' defined in URL ... Cannot resolve reference to bean 'dynamicNamingStrategy' while setting bean property 'namingStrategy'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'dynamicNamingStrategy' is defined 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328) 
    at 

和STS也抱怨:

Multiple annotations found at this line: 
    - Referenced bean 'dynamicNamingStrategy' 
    not found 

与下面的Spring上下文设置:

在一个项目中,我具有以下(摘录)的jmx管理上下文(core-app-web-common-management-context.xml):

<context:annotation-config /> 

<context:component-scan 
    base-package="com.a.b.c.management.*" /> 


<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter" 
    lazy-init="false"> 
    <property name="autodetect" value="true"></property> 
    <property name="namingStrategy" ref="dynamicNamingStrategy"/> 

其中dynamicNamingStrategy在不同项目中定义(和打包成一个不同的罐),并在被称为上述组件的扫描,如下

package com.a.b.c.management; 


@Component("dynamicNamingStrategy") 
public class DynamicNamingStrategy extends KeyNamingStrategy { 
...... 

上面Spring上下文被依次导入到主背景设在同一个项目:

<import resource="classpath*:/META-INF/spring/core-app-web-common-management-context.xml"/> 

所以,不知何故@Component扫描DynamicNamingStrategy是不工作...

如果我插件TEAD使用这个属性定义在出口国,那么它的工作原理:

<property name="namingStrategy"><bean class="com.a.b.c.management.DynamicNamingStrategy" /></property> 

,但我想明白为什么组件扫描机制,在第一时间上不去,显然我失去了一些东西。

此外,在STS春Explorer视图中缺少的是豆腐为好。启用对配置文件中的元素选项的支持似乎没有什么区别。

回答

1

将您的包名称末尾的.*放在您的<context:component-scan>元素base-package属性中。我认为这是导致组件扫描寻找名为*的软件包,其中可能没有一个(不能是一个)。

基础包就是这个基础包。 component-scan将扫描所有基础软件包中的所有子项,因此不需要在软件包名称末尾添加.*通配符。

相关问题