添加自动扫描的包,该配置的作用 是让spring ioC容器,来自动扫描注解
<context:component-scan base-package="com"></context:component-scan>
实体类Pet
public class Pet {
private String petName;
public Pet(){
System.out.println("空参构造器被调用了");
}
public String getPetName() {
return petName;
}
public void setPetName(String petName) {
System.out.println("set方法被调用");
this.petName = petName;
}
public void init(){
System.out.println("初始化方法");
}
public void destroy(){
System.out.println("销毁方法");
}
@Override
public String toString() {
return "Pet [petName=" + petName + "]";
}
}
- init-method表示对象初始化之前执行的方法
- destroy-method表示对象销毁时执行的方法
<bean id="pet1" class="com.igeek.lesson9.Pet" init-method="init" destroy-method="destroy">
<property name="petName" value="鹦鹉"></property>
</bean>
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("com/igeek/lesson9/beans.xml");
Pet bean = (Pet) ac.getBean("pet1");
ac.close();
输出结果:
空参构造器被调用了
set方法被调用
初始化方法
销毁方法
当然也可在init前后书写逻辑代码,以此来达到要求
创建MyBeanBeanPostProcessor类,实现BeanPostProcessor接口,在重写方法中编辑代码
public class MyBeanBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessAfterInitialization(Object obj, String id) throws BeansException {
// TODO Auto-generated method stub
System.out.println("我是bean后置处理器的方法.init之后调用");
if(id.equals("p1")){
Person p = new Person();
p.setName("二狗子");
return p;
}
return obj;
}
@Override
public Object postProcessBeforeInitialization(Object obj, String id) throws BeansException {
// TODO Auto-generated method stub
System.out.println("我是bean后置处理器的方法.init之前调用"+obj+id);
return obj;
}
}
输出结果:
我是person的构造器...
我是person的setter方法...
我是bean后置处理器的方法.init之前调用Person [name=张全蛋]p1
我是初始化bean方法
我是bean后置处理器的方法.init之后调用
我是person的构造器...
我是person的setter方法...
Person [name=二狗子]
我是销毁方法