java - 在 WebSphere 中注入(inject) spring 资源失败

标签 java spring websphere websphere-7 autowired

我一直在尝试将 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/

相关文章:

java - Spring Webflow 流式处理

java - Java Spring Data 中的 MongoDB $graphlookup

java - 如何在websphere中打印JAX-RPC服务的SOAP消息版本

spring - spring 的默认 Autowiring 是什么?

java - RequestDispatcher.forward() 到 "/WEB-INF"下的资源在 WebSphere 中不起作用

java - IBM WAS 忽略了 web.xml 中的安全性

Javafx:填充线

java - 比较器 - 未获得所需结果

java - 如何在 Java 7 中使用 AndroidStudio 和 DDMS Monitor

java - Hibernate,一个具有不同列数的用户类型