JAVA代码执行顺序的实验
2021/5/18 20:55:25
本文主要是介绍JAVA代码执行顺序的实验,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
项目过程中对Spring @Value注入和静态变量加载的执行顺序比较好奇,故做了实验,这里采用的是一个很有趣的类-ApplicationContextAware的实现类,因为其中有一个方法
setApplicationContext,会在构造方法后自动执行,方便输出结果。
代码如下:@Component
public class AppCtxUtil implements ApplicationContextAware { private static ApplicationContext applicationContext; private static String value = "静态变量"; @Value("${component.val}") private String UFaceUrl; static { System.out.println("静态代码块开始执行"); System.out.println("value = " + value); System.out.println("静态代码块开始结束"); } { System.out.println("构造代码块"); } public AppCtxUtil() { System.out.println("构造方法开始执行"); System.out.println("UFaceUrl = " + UFaceUrl); System.out.println("构造方法开始结束"); } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; System.out.println("执行set方法"); System.out.println("UFaceUrl = " + UFaceUrl); } public static <T> T getBean(String name, Class<T> clzz) throws BeansException { return (T) applicationContext.getBean(name, clzz); } public static ApplicationContext getApplicationContext() { return applicationContext; } } 启动后,经Spring Bean加载后,输出如下:
静态代码块开始执行
value = 静态变量
静态代码块开始结束
构造代码块
构造方法开始执行
UFaceUrl = null
构造方法开始结束
执行set方法
UFaceUrl = abcdefg
故得出结论:
静态变量/方法块 > 构造代码块 > 构造方法 > 注解注入值
注意:静态变量/代码块只有初始化的时候才会加载一次,后续不加载
这篇关于JAVA代码执行顺序的实验的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程
- 2024-11-26Springboot单体架构搭建资料:新手入门教程
- 2024-11-26Springboot单体架构搭建资料详解与实战教程
- 2024-11-26Springboot框架资料:新手入门教程
- 2024-11-26Springboot企业级开发资料入门教程
- 2024-11-26SpringBoot企业级开发资料详解与实战教程
- 2024-11-26Springboot微服务资料:新手入门全攻略