2014-05-12 86 views
0

我想注入一个类的列表。我想要一个类的列表,而不是对象。我如何注入一类对象,而不是对象本身

我的类看起来是这样的:

public class CodeServiceImpl{ 

    private List<Class<?>> codeList; 

// getter and setter 

我的spring配置文件(我没有使用说明,但XML)是

<bean id="myCodeServiceImpl" class = "net.croz.service.CodeServiceImpl"> 
     <property name="codeList"> 
      <list> 
       <ref bean="myAddress"/> 
       <ref bean="myCity"/> 
       <ref bean="myCountry"/> 
      </list> 
     </property> 
    </bean> 


    <bean id="myAddress" class="java.lang.Class" factory-method="forName"> 
      <constructor-arg value="net.croz.model.Address"/> 
     </bean> 

     <bean id="myCity" class="java.lang.Class" factory-method="forName"> 
      <constructor-arg value="net.croz.model.City"/> 
     </bean> 

     <bean id="myCountry" class="java.lang.Class" factory-method="forName"> 
      <constructor-arg value="net.croz.model.Country"/> 
     </bean> 

但没有被填充列表的编码表。它最终成为一个空对象。感谢您的帮助。

+1

1)你如何获得'CodeServiceImpl'实例? 2)你是否在其构造函数中访问'codeList'? – Morfic

+0

哦,男孩,我觉得很愚蠢。你打了两个小时我看不到的小恶魔。我只是使用构造函数。当然,如果你实际上没有调用有问题的bean,Spring并不会注入它。再次,非常感谢。 – user3627600

回答

1

其实它的工作原理是是:

<bean class="com.my.proj.Foo"> 
     <constructor-arg value="java.lang.String, org.springframework.util.StringUtils, byte[]"/> 
</bean> 

其中Foo是:

public class Foo { 

    private final List<Class<?>> codeList; 

    public Foo(Class<?>... codeList) { 
     this.codeList = Arrays.asList(codeList); 
    } 

} 

ConversionService做的东西为逗号分隔的字符串转换为Class<?>[]并试图解决在每个类的自己使用BeanClassLoader

+0

是的,我犯了一个愚蠢的错误,只是创建一个类的实例,并期望它像一个我没有实际调用该bean的bean而声明的bean。 – user3627600

相关问题