日期:2014-05-20  浏览次数:20876 次

一个关于Spring的问题,怎么注入一定数量的Bean。
例如:现在有类A及类B,在Spring中配置类A的Bean a及类B的Bean b,其中a的scope为prototype,其中a有许多配置参数且已在配置文件中配置好了。
问题是:Bean b有对类A对象数组的引用且它的数量是动态配置的,即在配置文件中,可由一个属性aNum来指定。例如:若aNum指定为5,那么就应该由Spring注入5个不同的bean a。
本人仅想到了的方法:用后置处理器,但在后置处理器中怎么访问Spring容器?Spring机制中,容器如何把自己注入到Bean中?。或者有其它更好的使用Spring的办法来实现这一特性?要求就是在类B中不要出现Spring类。
不好意思,本人刚刚用Spring开发项目。所以请高手来出出招。

------解决方案--------------------
...你五个A类,和一个A类有什么区别?
感觉B的设计得有点问题
如果非要这样的话,你就可以写五个A配置,然后在B的相关配置中指向五个A的Bean



------解决方案--------------------
探讨
...你五个A类,和一个A类有什么区别?
感觉B的设计得有点问题
如果非要这样的话,你就可以写五个A配置,然后在B的相关配置中指向五个A的Bean

------解决方案--------------------
我觉得技术上简单点,但配置稍微复杂点的做法是使用Set或者list注入:

例如:
XML code
<beans>
    
    <!-- oracle bean used for a few examples -->
    <bean id="A1" name="A1" class="com.pkg.ClassA"/>
    <bean id="A2" name="A2" class="com.pkg.ClassA"/>
    <bean id="A3" name="A3" class="com.pkg.ClassA"/>


    <!-- collection injection -->
    <bean id="B" class="com.pkg.ClassB">
        <property name="AClsList">
            <list>
                <ref local="A1"/>
                <ref local="A2"/>
            </list>
        </property>
    </bean>
</beans>

------解决方案--------------------
探讨
引用:
...你五个A类,和一个A类有什么区别?
感觉B的设计得有点问题
如果非要这样的话,你就可以写五个A配置,然后在B的相关配置中指向五个A的Bean


关键楼主是要动态配置A的个数,并不是五个A类,而是N个A对象,N不定。

这有可能,比如,用于动态线程数调整,来起到性能调优的目的。