Spring核心——Bean的定义与控制 (2)

Spring核心——Bean的定义与控制

2种方法都等效,实际使用是我们应该使用哪一种方法呢?

InitializingBean是Spring早期实现的一个生命周期回调方法。但是在JCP推出JSR-250和JSR-330规范之后,Spring的大神们开始意识到基于元编程思想和配置手段来实现非侵入式框架(Not Coupled)才是正道。所以现在都是推荐使用配置文件和JSR-250的@PostConstruct(关于各种Annotation的使用请关注后续的文章)。现在依然保留InitializingBean应该是考虑到兼容问题。

 

销毁方法

与创建方法相对应的是销毁方法。当一个类将要被销毁之前,对应的销毁回调方法会被调用。销毁方法也有一个继承实现和配置+注解实现:

继承实现:

Spring核心——Bean的定义与控制

配置实现:

Spring核心——Bean的定义与控制

依然建议销毁手段也使用配置或@PreDestroy来设定销毁方法。

 

全局配置初始化与销毁方法

IoC容器还提供了全局配置初始化与销毁方法的配置:

Spring核心——Bean的定义与控制

通过在<beans>标签上使用

通过在<beans>标签上使用default-init-method和default-destroy-method 属性参数,可以为容器中所有的Bean统一指定初始化和销毁的生命周期方法。

如果在<beans>上设定2个默认的生命周期方法,同时在<bean>上也指定了init-method或destroy-method,回调方法会以<bean>上的配置为准。这样就保证全局配置与单独配置可以共存。

使用初始化或销毁2个生命周期方法注意的要点:

初始化和销毁都提供了3种手段:XML配置、注解、以及实现接口。系统的各个部分会交由不同的团队开发,不遵循统一的规范,建议使用满足JSR规范的注解——@PostConstruct、@PreDestroy。如果是统一的团队,准训一致的规范,建议使用<beans>的属性统一名称使用全局配置。

如果Bean设计到代理模式时(例如使用了AOP),那么生命周期方法被调用时,有可能代理类还没有被创建出来。因为生命周期方法是实体类完成对应工作之后就会被调用,而与代理类无关。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzjjg.html