java - Spring设置抽象bean属性值

标签 java spring

我需要在运行时尝试 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/

相关文章:

java - 如何创建模块化的java项目?

java - 具有用户输入/事件监听器的动态边框布局

java - 当找到特定字母时减去前面的字符

java - 通过 userDetailsManager 更改用户角色

spring - 如何从intellij idea在Tomcat上部署war(spring app)?

java - 使用 <context :property-placeholder> in a factory method 定义的属性

java - 打印网络服务器中存在的目录结构

java - 调用者阻塞直到 getFoo() 准备好一个值?

java - Spring Kafka JsonSerializer 用法

java - 获取ManyToMany映射表的id