gpt4 book ai didi

java - 如何在 Spring 运行时向 bean 添加属性

转载 作者:太空宇宙 更新时间:2023-11-04 11:23:52 25 4
gpt4 key购买 nike

我是 Spring 新手。我有下面的 Person bean,其属性为名称、地址和年龄。现在我想将名为“性别”的新属性添加到我的自定义 BeanFactoryPostProcessor 中的 Person bean。我的 person bean 实现了 AttributeAccessor。

XML配置文件

<bean id="PersonBean" class="com.mkyong.common.Person">             
<property name="name" value="mkyong"></property>
<property name="address" value="address ABC"></property>
<property name="age" value="29"></property>
</bean>
<bean class="com.mkyong.common.CustomBeanFactory"></bean>

自定义 BeanFactoryPostProcessor

public class CustomBeanFactory implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory arg0) throws BeansException {
BeanDefinition beanDefinition = arg0.getBeanDefinition("PersonBean");
beanDefinition.setAttribute("gender", "Male");
}
}

人员类别
在此处输入代码

public class Person implements AttributeAccessor{

private String name;
private String address;
private int age;

public Person(){
System.out.println("Creating bean Person "+this);
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getAddress() {
return address;
}

public void setAddress(String address) {
this.address = address;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

@Override
public String[] attributeNames() {
// TODO Auto-generated method stub
return null;
}

@Override
public Object getAttribute(String arg0) {
// TODO Auto-generated method stub
return null;
}

@Override
public boolean hasAttribute(String arg0) {
// TODO Auto-generated method stub
return false;
}

@Override
public Object removeAttribute(String arg0) {
// TODO Auto-generated method stub
return null;
}

@Override
public void setAttribute(String arg0, Object arg1) {
// TODO Auto-generated method stub
}
}

客户端程序

public static void main(String [] arg){
ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"Spring-Autoscan.xml"});

Person personObj = (Person)context.getBean("PersonBean");
System.out.println("Value of gender attribute "+personObj.getAttribute("gender"));
}

如果我访问性别,我会得到空

请让我知道如何动态设置和获取属性。

最佳答案

您的 setAttribute() 方法为空。它不存储值。

public void setAttribute(String arg0, Object arg1) {
// TODO Auto-generated method stub
}

在其中创建一个Map,您可以在其中存储值并将其取回。像这样

private Map<String, Object> map = new HashMap<>();

public void setAttribute(String arg0, Object arg1) {
map.put(arg0, arg1);
}

public Object getAttribute(String arg0) {
return map.get(arg0);
}

关于java - 如何在 Spring 运行时向 bean 添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44588308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com