Spring常用注解之Bean生命周期相关注解

本篇文章将重点介绍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

1 条思考于 “Spring常用注解之Bean生命周期相关注解

  1. Pingback: 由@PostConstruct导致的tomcat启动阻塞 – 个人小站-记录编程知识