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引入使用