2

我一直在尝试将哈希图注入到一个类中。根据这篇文章: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>

结果是我试图自动装配的字段为空。

4

2 回答 2

0

似乎 autowire byType 或 byName 有效..你试过..??

于 2012-12-12T12:03:52.553 回答
0

我能够通过添加让我的应用程序再次部署

忽略扫描包:foo.myapp

(用你的基础包替换 foo.myapp ;))

但是,这感觉更像是一种解决方法。另一方面,这会稍微减少应用程序的启动时间。

于 2017-07-31T06:58:35.077 回答