我一直在尝试将哈希图注入到一个类中。根据这篇文章:Auto-wiring a List using util schema 给出了 NoSuchBeanDefinitionException我应该使用@Resource
而不是@Autowire
地图。
我的代码如下所示:
@Configurable
public class MyClass
{
@Resource(name="myMap")
private Map<String,String> myMap = new HashMap<String, String>();
我的配置如下所示:
<context:annotation-config/>
<context:component-scan base-package="com.MyClass"/>
<util:map id="myMap"
key-type="java.lang.String"
value-type="java.lang.String">
<entry key="k1" value="v1"/>
<entry key="k2" value="v2"/>
</util:map>
应用程序启动正常,但是当我尝试运行引用 的代码时MyClass
,我收到以下 WebSphere 错误:
CNTR0035E: EJB 容器捕获 com.ibm.wsspi.injectionengine.InjectionException:无法处理元数据的绑定 在 com.ibm.ws.injectionengine.InjectionEngineImpl.processBindings(InjectionEngineImpl.java:529) 在 com.ibm.ws.injectionengine.InjectionEngineImpl.processInjectionMetaData(InjectionEngineImpl.java:322) 在 com.ibm.ws.util.ComponentNameSpaceHelper.populateJavaNameSpace(ComponentNameSpaceHelper.java:806) ... 原因:com.ibm.wsspi.injectionengine.InjectionException: CWNEN0044E: 找不到为 MyService 组件定义的以下资源引用 [myMap] 的资源引用绑定。 在 com.ibm.wsspi.injectionengine.InjectionProcessor.collectInjectionNBindingData(InjectionProcessor.java:1042) 在 com.ibm.ws.injectionengine.InjectionEngineImpl.processBindings(InjectionEngineImpl.java:516) ... 52 更多 并抛出 com.ibm.ejs.container.ContainerException: 无法初始化 BeanMetaData 实例;嵌套异常是: com.ibm.wsspi.injectionengine.InjectionException:无法处理元数据的绑定。
有什么方法可以将地图注入我在 WebSphere 中的类中?
(使用 Spring 2.5、WebSphere 7)
早些时候,我尝试使用以下代码按名称自动装配:
@Configurable(autowire=Autowire.BY_NAME, preConstruction=true)
public class MyClass
{
@Qualifier("myMap")
@Autowired(required=true)
private Map<String,String> myMap = new HashMap<String, String>();
并使用此配置:
<context:annotation-config/>
<context:component-scan base-package="com.MyClass"/>
<util:map id="myMap"
key-type="java.lang.String"
value-type="java.lang.String">
<entry key="k1" value="v1"/>
<entry key="k2" value="v2"/>
</util:map>
结果是我试图自动装配的字段为空。