Spring IOC_11 生命周期

懒加载

<!-- 懒加载bean会通知IoC不要让bean预初始化而是在被引用的时候才会实例化 -->
<bean id="person1" name="person" class="com.nanborone.bean.Person" lazy-init="true" />
<!-- 在容器级别控制延迟初始化 -->
<beans default-lazy-init="true" />

初始化/销毁方法

在创建对象的时候,我们可以根据需要调用初始化和销毁的方法。在bean的scope属性值prototype的情况下,不会执行销毁的方法。使用工厂模式依然可以指定bean的初始化和销毁方法,但是在FactoryBean创建的情况下不可用。

<!-- init-method:构造方法执行完执行,destroy-method:在容器关闭时执行 -->
<bean id="person" class="com.nanborone.bean.Person" init-method="init" destroy-method="destroy" />

在实体类中添加初始化和销毁的方法:

public void init() {
    System.out.println("对象被初始化");
}
public void destroy() {
    System.out.println("对象被销毁");
}
public class IocTest {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("Application.xml");
        Person person = context.getBean("person", Person.class);
        System.out.println(person);
        // ApplicationContext没有close方法,需要使用具体的子类
        ((ClassPathXmlApplicationContext) context).close();
    }
}

初始化方法的前后处理方法

spring中包含一个BeanPostProcessor的接口,可以在bean的初始化方法的前后调用该方法,如果配置了初始化方法的前置和后置处理器,无论是否包含初始化方法,都会进行调用,但是无法处理通过FactoryBean创建的bean。

<bean id="myBeanPostProcessor" class="com.nanborone.bean.beanpostprocessor.MyBeanPostProcessor"/>

创建MyBeanPostProcessor 类:

public class MyBeanPostProcessor implements BeanPostProcessor {

	// 在初始化方法调用之前执行
    @Nullable
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("postProcessBeforeInitialization:"+beanName+"调用初始化前置方法");
        return bean;
    }

	// 在初始化方法调用完成后执行
    @Nullable
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("postProcessAfterInitialization:"+beanName+"调用初始化后缀方法");
        return bean;
    }
}
发布了15 篇原创文章 · 获赞 0 · 访问量 371

猜你喜欢

转载自blog.csdn.net/weixin_44601009/article/details/104233760