初始化执行时机
java自身
特性 | 构造注入 | 静态初始化块 | 实例初始化块 |
执行时机 | 在创建对象时,通过构造函数将依赖项注入到对象中 | 类加载时,第一次访问类时执行 | 创建对象时执行 |
作用范围 | 实例级别 | 类级别 | 实例级别 |
语法形式 | 通过构造函数参数进行注入 | 使用 static {} 块来定义 | 使用 {} 块来定义 |
依赖项传递 | 通过构造函数参数传递依赖项 | 不适用 | 不适用 |
初始化逻辑 | 可以执行一系列初始化操作,如属性赋值、依赖项初始化等 | 可以初始化静态变量、执行静态方法等 | 可以初始化实例变量、执行实例方法等 |
调用顺序 | 由构造函数调用顺序决定 | 在类加载时执行,与调用顺序无关 | 在创建对象时执行,与构造函数调用顺序无关 |
多次执行 | 每次创建对象时都需要进行构造注入 | 只执行一次 | 每次创建对象时都会执行 |
适用场景 | 对象依赖项注入、依赖项初始化等 | 静态变量初始化、静态方法调用等 | 实例变量初始化、实例方法调用等 |
SpringBoot
对于工具类可以适用 service 挂载启动事件,去进行初始化
执行时机 | 适用范围 | 参数/事件类型 | 执行时机 |
CommandLineRunner | 所有 Bean | String[] args | 应用程序启动后立即执行 |
ApplicationRunner | 所有 Bean | ApplicationArguments args | 应用程序启动后立即执行 |
@PostConstruct | 单个 Bean | 无 | Bean 初始化完成后立即执行 |
ApplicationListener | 所有 Bean | 根据监听的事件类型而定 | 监听到对应事件发生时执行 |
自定义 Spring Boot Starter | 所有 Bean | 无 | 引入 Starter 时执行初始化逻辑 |
ServletContextInitializer | Servlet 应用程序 | ServletContext、ServletRegistration... | Servlet 容器启动时执行 |
Spring Boot 生命周期事件监听器 | 所有 Bean | 根据监听的事件类型而定 | 相应生命周期事件发生时执行自定义逻辑 |
工具类初始化
工具类适用 spring boot 管理的 util
@Component 类上
@PostConstruct 方法上 启动的时候会自己直行
service注入适用
@Resource
private PermissionService permissionService;
util 通过BeanUtil引入使用
Loading...