Bean的初始化过程

作者: cd4bd3aa39ec | 来源:发表于2019-07-04 12:07 被阅读9次

Bean的初始化过程

         bean创建-->初始化-->摧毁

  容器管理bean的声明周期

  我们可以自定义初始化和摧毁方法;容器在bean进行到当前生命周期的时候来调用我们自定义的初始化和摧毁方法

1、 构造(对象创建)

          单实例:在容器启动时创建对象

          多实例:在每次获取时创建对象

2、 初始化

          对象创建完成,并赋值,调用初始化方法

3、摧毁

          单实例:容器关闭的时候

          多实例:容器不会管理这个bean,容器不会调用摧毁方法

  1)指定初始化和摧毁方法

          通过@Bean指定init-method和destroy-method;

  2)通过让Bean实现InitializingBean(定义初始化逻辑),DisposableBean(定义摧毁逻辑)

  3)使用JSR250规范中的注解

          @PostConstruct:在bean创建完成并且属性赋值完成,来执行初始化方法

          @PreDestory:在容器摧毁bean之前通知我们进行清理工作

  4)BeanPostProcessor:bean的后置处理器;

          在bean初始化前后进行一些处理工作;

          postProcessBeforeInitialization初始化方法之前执行

          postProcessAfterInitialization初始化方法之后执行

  BeanPostProcessor 原理

  populateBean(beanName, mbd, instanceWrapper);给bean进行属性赋值

  initializeBean

  {

      applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);

      invokeInitMethods(beanName, wrappedBean, mbd);执行自定义初始化

      applyBeanPostProcessorsAfterInitialization(Object bean, String beanName)

  }

  Spring底层对BeanPostProcessor的使用:

          bean赋值,注入其他组件,@Autowired,声明周期注解功能,@Async,xxxBeanPostProcessor;

@ComponentScan("com.spring.bean")

@Configuration

public class MainConfigOfLifeCycle {

//@Scope("prototype")

@Bean(initMethod="init",destroyMethod="destroy")

public Car car(){

return new Car();

}

}

public class Car {

public Car(){

System.out.println("new Car ...");

}

public void init(){

System.out.println("init ...");

}

public void destroy(){

System.out.println("destroy ...");

}

}

@Component

public class Cat implements InitializingBean,DisposableBean{

public Cat(){

System.out.println("new Cat .........................");

}

public void afterPropertiesSet() throws Exception {

// TODO Auto-generated method stub

System.out.println("init ...........................");

}

public void destroy() throws Exception {

// TODO Auto-generated method stub

System.out.println("destroy ..........................");

}

}

@Component

public class Dog {

public Dog(){

System.out.println("new Dog ~~~~~~~~~~~~~~~~~");

}

@PostConstruct

public void init(){

System.out.println("init Dog ~~~~~~~~~~~~~~~~~");

}

@PreDestroy

public void destroy(){

System.out.println("destroy Dog ~~~~~~~~~~~~~~~~~");

}

}

/**

* 后置处理器:初始化前后进行处理工作

* 将后置处理器加入到容器中

*

*/

@Component

public class MyBeanPostProcessor implements BeanPostProcessor {

@Override

public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {

// TODO Auto-generated method stub

System.out.println(bean.getClass().getName()+">>>>>>>>postProcessAfterInitialization<<<<<<<<<<");

return BeanPostProcessor.super.postProcessAfterInitialization(bean, beanName);

}

@Override

public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {

// TODO Auto-generated method stub

System.out.println(bean.getClass().getName()+">>>>>>>>postProcessBeforeInitialization<<<<<<<<<<");

return BeanPostProcessor.super.postProcessBeforeInitialization(bean, beanName);

}

}

public class IOCTest_LeftCycle {

@Test

public void test01(){

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);

System.out.println("........");

//context.getBean("car");

context.close();

}

}

相关文章

  • Bean的初始化过程

    Bean的初始化过程 bean创建-->初始化-->摧毁 容器管理bean的声明周期 我们可以自定义初始化...

  • Spring生命周期

    1. @Bean初始化和销毁 1.1 bean的生命周期:   bean创建-----初始化-----销毁的过程 ...

  • Spring 生命周期

    Bean生命周期 Bean创建 --> 初始化 --> 销毁过程 容器管理Bean生命周期 自定义初始化和销毁方法...

  • Bean在IOC容器中的生命周期

    大致分为4个部分:Bean定义、Bean初始化、Bean生存期、Bean销毁。 Bean定义过程大致:Spri...

  • Spring注解06 @Bean生命周期

    bean的生命周期:bean创建---初始化----销毁的过程容器管理bean的生命周期: 我们可以自定义初始化和...

  • Spring bean 生命周期

    bean的生命周期:bean创建---初始化----销毁的过程容器管理bean的生命周期;我们可以自定义初始化和销...

  • Spring源码学习③-生命周期

    Bean生命周期: Bean创建=》初始化=》销毁的过程,我们称之为Bean的生命周期。 Spring里面...

  • Spring bean的生命周期

    Spring bean的生命周期 生命周期 bean从创建 -> 初始化 -> 销毁的过程 默认情况下 bean的...

  • Spring Bean的生命周期

    Bean的生命周期 过程 : bean创建 -> bean初始化 -> 销毁 对象的构造 单例模式:在容器启动的时...

  • Spring Bean注册解析(一)

    Spring是通过IoC容器对Bean进行管理的,而Bean的初始化主要分为两个过程:Bean的注册和Bean实例...

网友评论

    本文标题:Bean的初始化过程

    本文链接:https://www.haomeiwen.com/subject/ugplhctx.html