Spring动态注入一个属性

时间:2013-03-22 06:49:40

标签: java spring conceptual

我是Spring的新手,我遇到了需要帮助的情况。 我的场景是我有一个像这样的特定模块的bean定义。

<bean name="ruleEngineAction" class="com.xxxxx.yyyy.UserAction" scope="prototype">
<property name="userManager">
    <ref bean="userManager" />
</property>
<property name="userDto">
        <ref bean="userDto" />
</property>
</bean>

现在在这个bean中我想再使用一个属性,但这取决于应用程序流程,如

<property name="roleManager">
     <ref bean="roleManager">
</property>

所以我应该在bean定义中包含这个属性,或者我可以在代码中动态地执行它,因为我不希望这个属性被大量使用。

请建议我正确有效的方法。

4 个答案:

答案 0 :(得分:2)

从我对问题的理解,只有一个roleManager类型的bean,但roleManager的用法是基于应用程序流。

在这种情况下,我建议您像对待任何其他bean一样将roleManager注入ruleEngineAction,但只在必要时使用bean。

在正常的类中弹出不必要的依赖是一种不好的做法,例如添加对applicationContext的引用以便在运行时动态获取bean。

答案 1 :(得分:1)

无论是否注入此bean,它都会由Spring创建。为什么不在您的UserAction中包含该属性以及是否使用它,可以在您的班级中决定。注入豆子没有害处,因为无论如何你都会在某些情况下使用它。

如果情景如此,如果你不注入/使用对象将不会被创建,那么考虑这种情况是有意义的,但是因为Spring无论如何都会创建对象,所以注入它真的不应该是一个问题。

答案 2 :(得分:0)

您需要在com.xxxxx.yyyy.UserAction的班级roleManager中添加带有getter和setter的新属性,例如:

class UserAction {
   // your previous properties userManager, userDto, etc.

   private RoleManager roleManager; // assuming interface/class as RoleManager for roleManager

   // getter and setter for roleManager

   // your other action methods which will use roleManager

}

答案 3 :(得分:0)

如果你也注入也没有问题。只要你访问那个类,它就会创建该类的对象。