Spring bean的生命周期

什么时bean的生命周期

Bean 是指在 Spring 容器中被管理的对象,它们可以被注入到其他对象中,也可以被其他对象所依赖。在 Spring 容器中,每个 Bean 都有一个生命周期,从创建到消亡的完整过程,例如人从出生到死亡的整个过程就是一个生命周期。


1、实例化

创建bean实例。

public class User  {
    private String mag;

    public User() {
        System.out.println("3.user无参构造实例化");
    }
}

读取xml配置文件或注解创建BeanDefifinition对象。

将该对象保存到beanDefinitionMap中。

执行BeanFactoryPostProcessor工厂后处理器

创建以上接口实现类并重写方法,可以进行注册和修改功能。注册新的bean对象、修改bean对象id所对应的bean对象本身。

public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {
    //注册新的
    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException {

        System.out.println("1.工厂后处理器注册新的");
    }

    //id
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {

        System.out.println("2.工厂后处理器修改id");
    }
}
2、依赖注入

setter注入bean进行属性赋值

public class User {
    private String mag;


    public void setMag(String mag) {
        this.mag = mag;
        System.out.println("4.setter方法");
    }
}
3、执行Aware的接口
bean的实体类实现aware接口常用方法
public class User implements  BeanNameAware, BeanFactoryAware, ApplicationContextAware {
    private String mag;

    @Override
    public void setBeanName(String s) {
        System.out.println("5.BeanNameAware拿到JavaBean名字"+s);
    }

    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        System.out.println("6.BeanFactoryAware拿到bean工厂对象"+beanFactory);
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println("7.ApplicationContextAware拿到spring容器对象"+applicationContext);
    }

  
}
4、执行BeanPostProcessor后处理器before()、after()方法回调
public class MyBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {

        System.out.println("8.后处理器的before方法");
        return bean;
    }
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("11后处理器的after方法");
        return bean;
    }
}
5、在后处理器运行中初始化bean对象

1.实现InitializingBean接口初始化bean对象

2.自定义方法配合xml 的<init-method>bean标签属性

@Component
public class User implements InitializingBean {
    private String mag;

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("9.接口初始化");
    }
    public void doint(){
        System.out.println("10属性初始化");
    }
}
6、Bean的应用

1.执行以上5步骤实例化并初始化的bean对象保存到singletonObjects中,开始进行业务操作。

public class Test01 {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("appliaction.xml");
        Object user = context.getBean("user");
        System.out.println(user);
        context.close();
    }
}
7、销毁

当不再需要bean时,或者当容器关闭时,如果bean实现了' DisposableBean '接口或使用' @PreDestroy ',则分别调用' destroy() '或带注释的方法,自定义销毁方法配合<destroy-method>bean标签属性。

public class User  {
    private String mag;

    public void destroy(){
        System.out.println("12.user销毁");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值