我一直在尝试将 HashMap 注入(inject)到一个类中。根据这篇文章:Auto-wiring a List using util schema gives NoSuchBeanDefinitionException对于 map ,我应该使用 @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.
Is there any way to inject the map into my class in WebSphere?
(using Spring 2.5, WebSphere 7)
Earlier, I'd tried autowiring by name with this code:
@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>
结果是我尝试 Autowiring 的字段为空。
最佳答案
似乎 Autowiring byType 或 byName 有效.. 你有没有试过..??
关于java - 在 WebSphere 中注入(inject) spring 资源失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13766252/