如何配置一个带泛型的Bean

原创
2015/08/21 14:20
阅读数 3.1K

希望在Spring容器中配置一个带泛型的Bean,直接配置如下: 

Xml代码  收藏代码

  1. <bean id="list" class="java.util.ArrayList<java.lang.String>"/>  



启动容器时,将报如下所示: 

Java代码  收藏代码

  1. Caused by: org.xml.sax.SAXParseException: The value of attribute "class" associated with an element type "null" must not contain the '<' character.  

  2.     at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)  

  3.     at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)  

  4.     at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)  

  5.     at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1427)  

  6.     at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanAttributeValue(XMLScanner.java:945)  



这是因为“<”或“>”的字符是XML的特殊字符,它会破坏Spring XML配置文件的格式,因此产生了错误 


由于Spring 3.0引入了JavaConfig,以代码的方式定义Bean,因此我们可以使用如下方式配置之: 

Java代码  收藏代码

  1. package com.ioctest; /** 

  2.  * Copyright:中软海晟信息科技有限公司 版权所有 违者必究 2013  

  3.  */  

  4.   

  5. import org.springframework.context.annotation.Bean;  

  6. import org.springframework.context.annotation.Configuration;  

  7.   

  8. import java.util.ArrayList;  

  9. import java.util.List;  

  10.   

  11. @Configuration  

  12. public class AppConfig {  

  13.   

  14.     @Bean (name = "listStr")  

  15.     public List<String> listStrBean(){  

  16.         return new ArrayList<String>();  

  17.     }  

  18. }  



在XML配置文件中引用这个JavaConfig: 

Xml代码  收藏代码

  1. <?xml version="1.0" encoding="UTF-8" ?>  

  2. <beans xmlns="http://www.springframework.org/schema/beans"  

  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

  4.        xmlns:p="http://www.springframework.org/schema/p"  

  5.        xmlns:context="http://www.springframework.org/schema/context"  

  6.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd  

  7.        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">  

  8. <!--     <bean id="list" class="java.util.ArrayList<java.lang.String>"/>-->  

  9.   

  10.     <context:component-scan base-package="com.ioctest"/>  

  11.     <context:annotation-config/>  

  12.   

  13. </beans>  



这个就可以正确启动了: 

Java代码  收藏代码

  1. import org.springframework.context.ApplicationContext;  

  2. import org.springframework.context.support.ClassPathXmlApplicationContext;  

    import java.util.List;  


  3. public class Tester {  


  4.     public static void main(String[] args) {  

  5.         ApplicationContext applicationContext = new ClassPathXmlApplicationContext("test.xml");  

  6.         List<String> listStr = (List<String>) applicationContext.getBean("listStr");  

  7.         listStr.add("ddd");  

  8.     }  

  9. }  


展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部