从Spring applicationContext自动生成映射到JSF bean



我有一个JSF 2.0 + Spring项目,当我试图将Spring bean自动装配到JSF bean中时,发生了一些奇怪的事情。这是我的应用程序的例子context:

<context:component-scan base-package="com.ticketfront" />
<util:map id="map" > 
    <entry key="rp">
        <util:map>
            <entry key="9003" value="RegP"/>
        </util:map>
    </entry>
</util:map>

这是我的jSF bean的一部分:

@Named
@Scope("session")
public class TicketViewBean implements Serializable {
@Autowired
Map<String, Map<String, String>> map;
}

部署运行成功,但在我的jsf bean autowired属性地图第一个条目是正常的,就像我在applicationContext中配置的一样,但有很多其他条目被放入地图。例如:

map = (java.util.LinkedHashMap) {map={rp={9003=RegP}}, systemEnvironment={USERPROFILE=C:UsersAdministrator, JAVA_HOME=C:Program FilesJavajdk1.7.0_40, NB_EXEC_TOMCAT_START_PROCESS_UUID=tomcat70:home=C:Program FilesApache Software FoundationApache Tomcat 7.0.34:base=apache-tomcat-7.0.34.0_base, SystemDrive=C:, JPDA_TRANSPORT=dt_shmem, CURRENT_DIR=C:Program FilesApache Software FoundationAp

和很多其他的东西,甚至WEB-XML....

我完全不明白为什么会这样

正如Spring参考指南

中提到的

只要期望的键类型是String,即使键入映射也可以自动连接。Map值将包含期望类型的所有bean ,键将包含相应的bean名称:

所以你得到的是Map s的Map。这将为您提供自己的Map,以及可以表示为MapMap的所有其他bean。这是大多数PropertySource bean的情况,它们在bean中的Map中得到。(systemEnvironment是所有的环境变量)等等。

要修复@Qualifier("map")到您的定义或使用@Resource代替@Autowired

相关内容

  • 没有找到相关文章

最新更新