bean功能的增强和自动扫描

添加自动扫描的包,该配置的作用 是让spring ioC容器,来自动扫描注解


实体类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表示对象销毁时执行的方法

        

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=二狗子]
我是销毁方法

你可能感兴趣的:(bean功能的增强和自动扫描)