如何初始化中春天的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