我需要在运行时尝试 spring bean 属性值。目前我正在这样做
Object bean = context.getBean(beanName);
BeanWrapper wrapper = PropertyAccessorFactory.forBeanPropertyAccess(bean);
wrapper.setPropertyValue(propertyName, newValue);
但是有些bean被配置为抽象
<bean id="abstractFoo" abstract="true" class="com.Foo" />
<bean id="bar" class="com.Bar">
<constructor-arg><bean parent="abstractFoo" /></constructor-arg>
</bean>
在这种情况下context.getBean("abstractFoo")
抛出BeanIsAbstractException
这确实是一个简化的示例,但我希望您能理解。
知道如何更改抽象 bean 的属性值(在本例中为“abstractFoo”)吗? 我们使用的是 spring 2.5.4
编辑
将 XML 示例更改为更加具体。由于安全原因,abstractFoo 被声明为抽象。
最佳答案
Spring应用程序上下文包含bean定义,Spring实例化由这些定义定义的bean对象。
您当前的代码获取从命名 bean 定义创建的对象,并更改其属性。然而,abstract
bean 永远不会实例化为对象,它们仅以定义的形式存在,并由具体 bean 的定义继承。
所以,如果你想改变抽象bean的属性,你需要改变它们的定义,这可以使用 BeanFactoryPostProcessor
来完成。 。但请注意,后处理器是在容器启动期间应用的,因此如果您希望它实际上是“运行时”,则此方法不适用。
关于java - Spring设置抽象bean属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5498355/