Java 使用SpEL更新springbean属性的值
我正在使用Spring3创建一个web应用程序,希望利用Spring表达式语言的强大功能,但遇到了一个问题。我需要将我的一个bean上的属性值设置为另一个bean上的方法调用的结果。我知道我可以做到这一点,但问题是该方法调用的结果可能会在bean初始化后更改,我需要该属性来反映更改。例如:Java 使用SpEL更新springbean属性的值,java,spring,expression,Java,Spring,Expression,我正在使用Spring3创建一个web应用程序,希望利用Spring表达式语言的强大功能,但遇到了一个问题。我需要将我的一个bean上的属性值设置为另一个bean上的方法调用的结果。我知道我可以做到这一点,但问题是该方法调用的结果可能会在bean初始化后更改,我需要该属性来反映更改。例如: <beans> ... <bean name="guestList" class="java.util.ArrayList"></bean> <bean na
<beans>
...
<bean name="guestList" class="java.util.ArrayList"></bean>
<bean name="party" class="some.custom.class.Party">
<property name="numberOfGuests" value="#{guestList.size()}" />
</bean>
...
</beans>
...
...
据我所知,numberOfGuests
字段是在第一次访问party
字段时设置的。但是在访问party
字段后,来宾的数量可能会发生变化,我需要numberOfGuests
字段来反映这一点。每当我需要更新值时,是否有办法在我的应用程序中重新初始化numberOfGuests
字段
这只是一个示例,直接访问
guestList
bean对我的特定情况不起作用。示例#{guestList.size()}只设置属性的初始值,而不设置使其保持最新的策略。假设您没有使用延迟加载,Spring会在启动时从应用程序上下文实例化Spring管理的bean。从那时起,由开发人员负责更新属性值 如果将范围设置为prototype,那么每次Spring加载bean时,它都应该重新计算来宾列表的大小:
<bean name="party" class="some.custom.class.Party" scope="prototype">
但是,如果可以的话,最好避免使用SpringAPI。通常开发人员不希望与DI框架耦合。我想最简单的方法是将列表(
guestList
)注入bean,并在每次需要numberOfGuests
时从Java代码手动调用其.size()
方法,即:
package some.custom.class;
public class Party {
private List<?> guestList;
// getter & setters
public int getNumberOfGuests() {
return guestList!=null ? guestList.size() : 0;
}
}
打包some.custom.class;
公营党{
私人名单宾客名单;
//接球手和接球手
public int getNumberOfGuests(){
return guestList!=null?guestList.size():0;
}
}
而且
<bean name="party" class="some.custom.class.Party">
<property name="guestList" ref="guestList"/>
</bean>
这绝对是最简单(也是首选!)的方法,但OP说“这只是一个示例,直接访问guestList bean不适合我的具体情况。”你说得对。我明白了。我们当然需要更多的信息。直接访问guestList
bean有什么问题?
<bean name="party" class="some.custom.class.Party">
<property name="guestList" ref="guestList"/>
</bean>