Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Spring的运行时向bean添加属性_Java_Spring - Fatal编程技术网

Java 如何在Spring的运行时向bean添加属性

Java 如何在Spring的运行时向bean添加属性,java,spring,Java,Spring,我是春天的新手。我有下面的Person bean,其名称、地址和年龄作为属性。现在,我想在我的自定义BeanFactoryPostProcessor中向Person bean添加一个名为gender的新属性。我的person bean实现了AttributeAccessor XML配置文件 <bean id="PersonBean" class="com.mkyong.common.Person"> <property name="name" v

我是春天的新手。我有下面的Person bean,其名称、地址和年龄作为属性。现在,我想在我的自定义BeanFactoryPostProcessor中向Person bean添加一个名为gender的新属性。我的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>
个人类别
在此处输入代码

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
} 
在内部创建一个
映射
,您可以在其中存储值并将其取回。像这样

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);
}
private Map=new HashMap();
公共void setAttribute(字符串arg0,对象arg1){
map.put(arg0,arg1);
} 
公共对象getAttribute(字符串arg0){
返回map.get(arg0);
}
您的setAttribute()方法为空。它不存储该值

public void setAttribute(String arg0, Object arg1) {
    // TODO Auto-generated method stub
} 
在内部创建一个
映射
,您可以在其中存储值并将其取回。像这样

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);
}
private Map=new HashMap();
公共void setAttribute(字符串arg0,对象arg1){
map.put(arg0,arg1);
} 
公共对象getAttribute(字符串arg0){
返回map.get(arg0);
}

是的,我同意。但是在自定义BeanFactory后处理器类中使用的beanDefinition.setAttribute方法有什么用呢?是的,我同意。但是在自定义BeanFactoryPostProcessor类中使用的beanDefinition.setAttribute方法有什么用途呢