本篇文章将重点介绍Spring中Bean生命周期相关注解的常用属性。并列举实际案例说明Spring中Bean生命周期相关注解的具体用法。
1.@Bean注解
@Bean注解即属于Spring组件注册相关注解,在Spring Bean的生命周期中也有使用,上篇文章中已经介绍过@Bean的相关用法,可参考:Spring中的@Bean注解。
2.@PostConstruct注解
2.1 介绍
@PostConstruct注解属于javax.annotation包下面的注解,属于JavaEE5之后新增的规范,用来影响Servlet的生命周期。在Spring中也对这个注解做了兼容,可以用来在Spring Bean初始化之后完成一些特定的操作。
2.2 使用场景
比如在Bean创建完成之后,完成一些本地缓存的初始化,或者启动一些后台线程等。
2.3 执行时机
(1)Servlet中:在服务器加载Servlet的时候会运行该方法,并且只会调用一次,类似于Servlet中的init()方法,它是在构造函数之后,init()方法之前执行。
(2)如果在Spring中:Spring完成对象创建,赋值及执行完Aware方法之后,在执行init-method和afterPropertiesSet方法之前执行。
2.4 @PostConstruct常用属性
/** * 主要用来作用于方法上。被作用的方法是一个非静态的void方法,而且方法不能声明 * 抛出异常 */ @Documented @Retention (RUNTIME) @Target(METHOD) public @interface PostConstruct { }
2.5 @PostConstruct注解使用示例
例:在创建StudentService对应的Bean实例时,初始化用于缓存用户数据的本地缓存对象,查询用户列表的时候,可以使用该缓存对象,放在初始化块中,可以灵活设置缓存的相关属性。
@Service public class UserService { /** 用户信息本地缓存 */ private UserCache<List<User>> userCache; @Resource private UserDao userDao; @PostConstruct public void initUserCache() { // 使用CacheUtils进行本地cache的初始化 // 包括设置cache的大小及cache的缓存时间 userCache = CacheUtils.initUserCache(); } /** * 查询所有用户信息 */ public List<User> searchUserList() { List<User> userList = userCache.getUserList(); // 不为null的时候返回,如果没有查到数据,缓存空集合 // 失效之后缓存中为null,会再次回源查询数据 if (null != userList) { return userList; } List<User> userListFromDB = userDao.findAllUser(); // 未查到数据,userListFromDB需要设置为空List. userCache.set(userListFromDB); return userListFromDB; } }
3.@PreDestroy注解
3.1 使用场景
可以在bean实例被销毁时,做一些清理工作,比如关闭一些数据库或者网络的连接,记录一些系统关闭的日志信息等。
3.2 执行时机
(1)Servlet中:在Servlet被服务器卸载的时候执行,并且只会执行一次,被该注解修饰的方法会在Servlet的destroy方法执行之后,在Servlet被彻底卸载完成之前执行。
(2)Spring中:在Spring发布容器关闭事件之后,在执行Bean的destroy方法之前执行。
3.3 @PreDestroy的常用属性
/** * 标注在一个非静态的void方法上,而且被标注的方法不能声明抛出异常 */ @Documented @Retention (RUNTIME) @Target(METHOD) public @interface PreDestroy { }
3.4 @PreDestroy使用示例
例:在容器关闭的时候,删除系统缓存的和用户信息相关的缓存文件
@Service public class UserService { @PreDestroy public void destroyUserService() { // 可以在该步骤中清理系统的缓存文件 FileUtils.clearAllUserCacheFile(); System.out.println("context close..."); } }
至此,和Spring Bean的生命周期有关的注解介绍完毕,欢迎转发!
注意:文章属于原创,如果转发请标注文章来源:个人小站【www.jinnianshizhunian.vip】
另外提供一些优秀的Java架构师及IT开发视频,书籍资料。无需注册,无需登录即可下载,免费下载地址:https://www.592xuexi.com
Pingback: 由@PostConstruct导致的tomcat启动阻塞 – 个人小站-记录编程知识