我是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定义中包含这个属性,或者我可以在代码中动态地执行它,因为我不希望这个属性被大量使用。
请建议我正确有效的方法。
答案 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)
如果你也注入也没有问题。只要你访问那个类,它就会创建该类的对象。