| 特性 | 构造注入 | 静态初始化块 | 实例初始化块 |
|---|---|---|---|
| 执行时机 | 在创建对象时,通过构造函数将依赖项注入到对象中 | 类加载时,第一次访问类时执行 | 创建对象时执行 |
| 作用范围 | 实例级别 | 类级别 | 实例级别 |
| 语法形式 | 通过构造函数参数进行注入 | 使用 static {} 块来定义 |
使用 {} 块来定义 |
| 依赖项传递 | 通过构造函数参数传递依赖项 | 不适用 | 不适用 |
| 初始化逻辑 | 可以执行一系列初始化操作,如属性赋值、依赖项初始化等 | 可以初始化静态变量、执行静态方法等 | 可以初始化实例变量、执行实例方法等 |
| 调用顺序 | 由构造函数调用顺序决定 | 在类加载时执行,与调用顺序无关 | 在创建对象时执行,与构造函数调用顺序无关 |
| 多次执行 | 每次创建对象时都需要进行构造注入 | 只执行一次 | 每次创建对象时都会执行 |
| 适用场景 | 对象依赖项注入、依赖项初始化等 | 静态变量初始化、静态方法调用等 | 实例变量初始化、实例方法调用等 |
对于工具类可以适用 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引入使用