首页 > 解决方案 > Spring中注解的执行顺序

问题描述

我正在尝试从 Spring Boot 中的属性文件中加载一些属性,但也想使用列表访问它们。我不确定类成员的初始化顺序。

@Getter
@Setter
@ConfigurationProperties
public class ConfigurationM{

   @Value("${propA}")
   private String propA;

   @Value("${propB}")
   private String propB;

   private List<String> list = Collections.unmodifiableList(propA, propB);


}

@Value 注释是否在列表初始化之前注入值?使用注释加载类时如何确定评估顺序?

标签: javaspring

解决方案


@Value 注释是否在列表初始化之前注入值?

很不幸的是,不行!“实例初始化程序”(类/对象主体)在“构造函数”之前执行,spring 没有机会在那里注入任何东西。

使用注释加载类时如何确定评估顺序?

-> https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans


你也可以@PostConstruct用纯驱逐:

// pure (built-in) SpEL:
@Value("#{{'${propA}', '${propB}'}}")
private List<String> list;
    
// Java < 9
@Value("#{ T(java.util.Arrays).asList('${propA}', '${propB}')}")
private List<String> listJ8;
    
// Java > 8
@Value("#{ T(java.util.List).of('${propA}', '${propB}')}")
private List<String> listJ9;

推荐阅读