@PostConstruct

@PostConstruct 该注解被用来修饰一个非静态void()方法。

@PostConstruct 修饰的方法会在服务器加载 Servlet 的时候运行,并且只会被服务器执行一次。

@PostConstruct 在构造函数之后执行,init()方法之前执行。

通常我们会是在 Spring 框架中使用到 @PostConstruct 注解,该注解的方法在整个 Bean 初始化中的执行顺序:
Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法)


@PostConstruct 注解用于需要在依赖注入完成后执行任何初始化的方法。
必须在类投入使用之前调用此方法。 所有支持依赖注入的类都必须支持这个注解。
即使类没有请求注入任何资源,也必须调用用 PostConstruct 注释的方法。 这个注解只能注解一种方法。 应用 PostConstruct 注释的方法必须满足以下所有标准:

该方法不能有任何参数,除非是拦截器,在这种情况下它需要一个由拦截器规范定义的 InvocationContext 对象。
在拦截器类上定义的方法必须具有以下签名之一:
void <方法>(InvocationContext)
对象 (InvocationContext) 抛出异常
注意:PostConstruct 拦截器方法不得抛出应用程序异常,但如果相同的拦截器方法除了生命周期事件之外还插入业务或超时方法,则可以声明它抛出检查异常,包括 java.lang.Exception。 如果 PostConstruct 拦截器方法返回一个值,它会被容器忽略。
在非拦截器类上定义的方法必须具有以下签名:
void <方法>()
应用 PostConstruct 的方法可以是 public、protected、package private 或 private。
除了应用程序客户端之外,该方法不得是静态的。
该方法可能是最终的。
如果该方法抛出未经检查的异常,则该类不得投入使用,除非在 EJB 的情况下,EJB 可以处理异常甚至从异常中恢复

package com.hdbc.config;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.mgt.SecurityManager;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
public class SecuritysConfig {

private final SecurityManager securityManager;

public SecuritysConfig(SecurityManager securityManager) {
this.securityManager = securityManager;
}

@PostConstruct
private void initStaticSecurityManager() {
SecurityUtils.setSecurityManager(securityManager);
}
}