bean功能的增强和自动扫描

添加自动扫描的包,该配置的作用 是让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=二狗子]
我是销毁方法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容