@PostConstruct用法详解介绍

1.@PostConstruct介绍

定义:在方法上加该注解会在项目启动的时候执行该方法,也可以理解为在spring容器初始化的时候执行该方法。

说明:被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Serclet的inti()方法。

被@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。

作用:在依赖注入完成后执行初始化操作,例如对成员变量进行赋值、数据加载等操作。

注意:@PostConstruct注解只能被用于非静态方法上,并且只会被容器调用一次。

如果一个类中存在多个被@PostConstruct注解标记的方法,则它们的执行顺序并不确定,可以使用@Order注解指定执行顺序。

2.具体分析

在开发过程中,@PostConstruct注解通常会被用在java类当中。

加载顺序: Constructor(构造函数) >> @Autowired、@Resource、@Value >> @PostConstruct。

使用该注解,会在@Autowired对象注入之后,调用本方法(此时,被注入的对象就存在了。

被@PostConstruct注解的方法将会在依赖注入完成后被自动调用。

3.解决方案

用法1:为静态属性赋值。

第一步:从application.yml配置文件当中取值。

@Value("${sql.keywords}")
String sqlKeywords;

说明:被@Value注解修饰的成员变量,也是可以被static修饰的。

@Value("${sql.keywords}")
static String sqlKeywords;

注意:此处的@Value是org.springframework.beans.factory.annotation的注解,而不是lombok的注解。

第二步:设置静态属性,但不赋值。

private static List<String> keywordsArray;

第三步:通过注解@PostConstruct进行赋值。 

/**
 * 将关键字转List
 */
@PostConstruct
private void convertKeywords() {
    keywordsArray = List.of(sqlKeywords.split(","));
}

只有这样,才能顺利地将application.yml文件当中的值转成List,并且还是静态属性。 

实现一次加载,永久使用的效果。 

用法2和用法3见文末推荐。

2025-04-09 11:32:18

4.补充说明

@Value

关于@Value注解用法的说明

如上图所示,即使使用@Value注解,我们依然可以为类的属性直接赋值。

代表的含义是:

如果通过注解没有拿到值的话,那么该值就会生效。

反之,如果通过注解拿到值了,默认值将会失效。

 

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

posted @ 2024-01-26 16:14  Marydon  阅读(1518)  评论(0)    收藏  举报