如何初始化中春天的bean

  介绍

如何初始化中春天的bean ?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

<强> bean的生命周期:创建bean对象,属性赋值-初始化方法调用前的操作,初始化方法——初始化方法调用后的操作,…-销毁前操作,销毁方法的调用。

自定义初始化方法和销毁方法两种方式:xml配置和注解。

①xml配置

& lt; bean id=皃erson"   类=癱om.core.Person"范围=皊ingleton"   init方法=癷nit"销毁方法=癱leanUp"   自动装配=癰yName"lazy-init=皌rue"比;   & lt;/bean>   

②注解配置

 @scope (“singleton")
  @Lazy
  @ bean (name=皃erson" initMethod=癷nit", destroyMethod=癱leanUp",
  自动装配=Autowire.BY_NAME)
  公众人物person01 () {
  返回新人(“lisi" 20);
  }

单实例bean在容器创建完成前会进行创建并初始化,在容器销毁的时候进行销毁。多实例bean(范围=原型)在第一次获取该bean实例时才会创建并初始化,且容器不负责该bean的销毁。

公共接口InitializingBean {
  空白afterPropertiesSet()抛出异常;
  }

在BeanFactory设置完豆属性后执行

需要被豆实现的接口,一旦bean的属性被BeanFactory设置后需要做出反应:如,执行自定义初始化,或者仅仅是检查是否设置了所有强制属性。

实现InitializingBean的可替代方式为给豆指定一个自定义的init方法,例如在一个xml bean定义中。

在bean的属性设置之后进行操作,不返回任何值但是允许抛出异常。

公共接口DisposableBean {
  空白摧毁()抛出异常;
  }

被豆实现的接口,在销毁时释放资源,在bean销毁的时候调用该方法。

如果销毁一个缓存的单例,一个BeanFactory可能会调用这个销毁方法。

在容器关闭时,应用上下文会销毁所有的单例bean。

一种替代实现DisposableBean接口的方案为指定一个自定义的销毁方法方法,例如在一个xml bean定义中。

@ component   公共类猫实现InitializingBean DisposableBean {      公共的猫(){   System.out.println(构造函数“猫…“);   }      @Override   公共空间摧毁()抛出异常{//TODO自动生成方法存根   System.out.println(“猫…摧毁…“);   }      @Override   公共空间afterPropertiesSet()抛出异常{//TODO自动生成方法存根   System.out.println(“猫…afterPropertiesSet…“);   }      }

<>强测试结果

猫构造函数…
猫…afterPropertiesSet…
容器创建完成…2018年
四月08年6:35:46下午org.springframework.context.annotation。所
doClose
信息:关闭org.springframework.context.annotation。AnnotationConfigApplicationContext@11028347:
启动日期(太阳2018年4月08 18:35:46 CST);上下文层次结构的根
猫…摧毁…<强>

<强>使用JSR250规范定义的两个注解:

@PostConstruct: PostConstruct注解作用在方法上,在依赖注入完成后进行一些初始化操作。这个方法在类被放入服务之前被调用,所有支持依赖项注入的类都必须支持此注解。

@PreDestroy:在容器销毁豆之前通知我们进行清理工作

<>强自定义类使用上述两个注解

@ component   公共类狗实现ApplicationContextAware {//@ autowired   私人ApplicationContext ApplicationContext;      公共的狗(){   System.out.println(“狗构造函数…“);   }//对象创建并赋值之后调用   @PostConstruct   公共空间init () {   System.out.println(“狗.... @PostConstruct…“);   }//容器移除对象之前   @PreDestroy   公共空间破坏(){   System.out.println(“狗.... @PreDestroy…“);   }      @Override   公共空间setApplicationContext (ApplicationContext ApplicationContext)抛出BeansException {//TODO自动生成方法存根   这一点。applicationContext=applicationContext;   }      }

测试结果如下

狗构造函数…
狗.... @PostConstruct…
容器创建完成…2018年
四月08年6:42:11下午org.springframework.context.annotation。所
doClose
信息:关闭org.springframework.context.annotation。AnnotationConfigApplicationContext@11028347:
启动日期(太阳2018年4月08 18:42:10 CST);上下文层次结构的根

如何初始化中春天的bean