我一直试图将一个hashmap注入一个类。根据这篇文章:Auto-wiring a List using util schema gives 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 container caught com.ibm.wsspi.injectionengine.InjectionException: Failed to process bindings for metadata at com.ibm.ws.injectionengine.InjectionEngineImpl.processBindings(InjectionEngineImpl.java:529) at com.ibm.ws.injectionengine.InjectionEngineImpl.processInjectionMetaData(InjectionEngineImpl.java:322) at com.ibm.ws.util.ComponentNameSpaceHelper.populateJavaNameSpace(ComponentNameSpaceHelper.java:806) ... Caused by: com.ibm.wsspi.injectionengine.InjectionException: CWNEN0044E: A resource reference binding could not be found for the following resource references [myMap], defined for the MyService component. at com.ibm.wsspi.injectionengine.InjectionProcessor.collectInjectionNBindingData(InjectionProcessor.java:1042) at com.ibm.ws.injectionengine.InjectionEngineImpl.processBindings(InjectionEngineImpl.java:516) ... 52 more and is throwing com.ibm.ejs.container.ContainerException: Failed to initialize BeanMetaData instance; nested exception is: com.ibm.wsspi.injectionengine.InjectionException: Failed to process bindings for metadata.
有没有办法将地图注入我在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>
结果是我尝试自动装配的字段为空。
答案 0 :(得分:0)
似乎autowire byType或byName有效.. 你试过.. ??
答案 1 :(得分:0)
我可以通过添加
让我的应用程序再次部署忽略扫描包:foo.myapp
(用你的基础包替换foo.myapp;))
然而,这感觉就像一种解决方法。另一方面,这会略微减少应用启动时间。