网站站点是什么?如何创建站点?,国际域名注册管理机构,空间做子网站,家装网站建设哪家好点【README】
1#xff0c;本文主要编写了 初始化器例子并分析了其调用路径#xff1b;
2#xff0c;初始化器的执行顺序 先于 后置处理器#xff1b; 后置处理器#xff0c;refer2 springboot#xff1a;BeanPostProcessor示例及分析_PacosonSWJTU的博客-CSDN博客【RE…【README】
1本文主要编写了 初始化器例子并分析了其调用路径
2初始化器的执行顺序 先于 后置处理器 后置处理器refer2 springbootBeanPostProcessor示例及分析_PacosonSWJTU的博客-CSDN博客【README】1本文主要分析 BeanPostProcessor 的作用 开发方式2BeanPostProcessor 是bean后置处理器 简而言之就是bean被创建好了之后如果需要对其属性进行修改则 需要使用 BeanPostProcessor 来起作用3本文还顺带介绍了 InitializingBean 接口 啥都不说先上代码【1】 BeanPostProcessor 例子0借助 BeanPostProcessor Initializin...https://blog.csdn.net/PacosonSWJTU/article/details/121322957 【1】Initializer 初始化器例子
【1.1】初始化器
编写2个初始化器
// 初始化器1
Order(0)
public class Hello01Initializer implements ApplicationContextInitializerConfigurableApplicationContext {Overridepublic void initialize(ConfigurableApplicationContext applicationContext) {System.out.println(log Hello01Initializer.initialize() start...);ConfigurableEnvironment environment applicationContext.getEnvironment();MapString, Object map new HashMap();map.put(key1, v1);MapPropertySource mapPropertySource new MapPropertySource(hello01Initializer, map);environment.getPropertySources().addLast(mapPropertySource);System.out.println(log Hello01Initializer.initialize() over...);}
}// 初始化器2
Order(0)
public class Hello02Initializer implements ApplicationContextInitializerConfigurableApplicationContext {Overridepublic void initialize(ConfigurableApplicationContext applicationContext) {System.out.println(log Hello02Initializer.initialize() start...);ConfigurableEnvironment environment applicationContext.getEnvironment();MapString, Object map new HashMap();map.put(k2, v2);MapPropertySource mapPropertySource new MapPropertySource(hello02Initializer, map);environment.getPropertySources().addLast(mapPropertySource);System.out.println(log Hello02Initializer.initialize() over...);}
}
【1.2】配置初始化器
在 spring.factories 配置 初始化器1 如下 # 初始化器
org.springframework.context.ApplicationContextInitializer\
com.cmc.tr.springbt02config02.initializer.Hello01Initializer
在主程序中添加初始化器2
SpringBootApplication
public class Springbt02Config02Application {public static void main(String[] args) {SpringApplication springApplication new SpringApplication(Springbt02Config02Application.class);// 添加初始化器2 springApplication.addInitializers(new Hello02Initializer());springApplication.run(args);}
}打印结果 log Hello01Initializer.initialize() start... log Hello01Initializer.initialize() over... log Hello02Initializer.initialize() start... log Hello02Initializer.initialize() over... 很明显 初始化器1 的加载顺序 先于 初始化器2 【2】调用路径
【2.1】查看调用栈 调用路径大致为
step1 SpringApplication.run() 方法 从上图我们看到 初始化器是从 prepareContext() 开始调用的
而 后置处理器是从 refreshContext() 开始调用的 后置处理器 refer2 springbootBeanPostProcessor示例及分析_PacosonSWJTU的博客-CSDN博客 ;
干货所以 初始化器的执行顺序 先于 后置处理器
【补充】 关于 SpringApplication.refreshContext() 方法逻辑包括但不限于我这里没有列举完
创建bean执行bean 后置处理器执行 InitializerBean 的afterPropertiesSet() 方法
step2 SpringApplication.prepareContext(); 方法 step3 SpringApplication.applyInitializers() 应用初始化器方法 step4调用自定义初始化器方法.initialize() 方法