• java 静态代码块和spring @value等注解注入顺序


    java 静态代码块和spring @value等注解注入顺序

    关于实例变量与构造方法的初始化顺序问题
    Java类会先执行构造方法,然后再给注解了@Value 的属性注入值,所以在执行静态代码块的时候,就会为null。
    Java 及Spring 初始化顺序:java静态属性/静态代码块(根据声明的先后顺序加载)、构造代码块、 构造方法(即:spring创建FetchStockSchedule的实例 交给Spring 管理)、@Value/@ AutoWired/@Resouce 等注解 的成员变量等赋值。

     

     

    解决方案
    首先,让当前类变成Spring的bean,
    再使用@PostConstruct

    原理
    Java中该注解的说明:
    @PostConstruct该注解被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。

    通常我们会是在Spring框架中使用到@PostConstruct注解 该注解的方法在整个Bean初始化中的执行顺序:
    此时的执行顺序:

    构造方法
    Before Initialization
    使用PostConstruct注解
    InitializingBean接口
    init-method指定的初始化方法
    After Initialization

    代码:

    @Component
    public class MyConfig {
    private Logger logger = LoggerFactory.getLogger(this.getClass());
    
    @Value("${My_Config_Array}")
    private String myConfigArray;
    
    
    @PostConstruct
    public void init() {
    logger.info("我的配置信息=[{}]",myConfigArray);
    }
    
    /**
    * 在构造函数中打印配置信息
    */
    public MyConfig() {
    logger.info("MyConfig构造函数启动>>>");
    }
    }


    项目启动打印日志:
    2021-11-09 19:50:27.698 [main] [,] INFO c.a.project.config.MyConfig#<init> [line:29] - MyConfig构造函数启动>>>
    2021-11-09 19:50:27.700 [main] [,] INFO c.a.project.config.MyConfig#init [line:22] - 我的配置信息=[225,210,209]


    原文链接:https://www.cnblogs.com/pipicai96/p/11718761.html

  • 相关阅读:
    (LeetCode 72)Edit Distance
    (LeetCode 53)Maximum Subarray
    (LeetCode 64)Minimum Path Sum
    (算法)关于随机数的生成
    (笔试题)数组A中任意两个相邻元素大小相差1,在其中查找某个数。
    (笔试题)分椰子
    (笔试题)和0交换的排序
    (笔试题)合法字符串
    (笔试题)被3和5整除的数的和
    (笔试题)程序运行时间
  • 原文地址:https://www.cnblogs.com/oktokeep/p/15530697.html
Copyright © 2020-2023  润新知