Code de solution du problème:
1. applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id ="dog" class="educoder.Dog"></bean>
<bean id="student" class="step2.Student">
<property name="name" value="Tom"></property>
</bean>
<!-- 配置后处理器 -->
<bean class="step2.MyBeanPostProcessor"></bean>
</beans>
2.MyBeanPostProcessor.java
package step2;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
/********** Begin **********/
public class MyBeanPostProcessor implements BeanPostProcessor{
@Override
public Object postProcessAfterInitialization(Object bean, String beanname) throws BeansException {
Student stu= null;
System.out.println("对初始化之后的Bean进行处理,将Bean的成员变量的值修改了");
if("name".equals(beanname)||bean instanceof Student){
stu=(Student) bean;
stu.setName("Jack");
}
return stu;
}
@Override
public Object postProcessBeforeInitialization(Object bean, String beanname) throws BeansException {
System.out.println("初始化Bean之前的处理,此时我的名字:"+bean);
return bean;
}
}
/********** End **********/
3.Étudiant.java
package step2;
import org.springframework.beans.factory.BeanNameAware;
/********** Begin **********/
public class Student implements BeanNameAware{
private String name;
public Student() {
}
public void setName(String name) {
System.out.println("设置对象属性setName()");
this.name = name;
}
//实现BeanNameAware接口 并重写setBeanName方法
@Override
public void setBeanName(String beanName){
System.out.println("调用BeanNameAware的setBeanName()方法");
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
'}';
}
}
/********** End **********/
4.Task.java
package step2;
import educoder.Dog;
import step2.MyBeanPostProcessor;
import step2.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Task {
public Student getBean(){
/********** Begin **********/
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
Student student = app.getBean("student",Student.class);
return student;
/********** End **********/
}
}