【问题标题】:Order of execution of annotations in Spring [duplicate]Spring中注释的执行顺序[重复]
【发布时间】:2021-02-27 11:18:21
【问题描述】:

我正在尝试从 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 注解会在列表初始化之前注入值吗?使用注解加载类时,求值顺序如何确定?

【问题讨论】:

  • 在创建对象时发生注入。与其依赖订单,@PostConstruct 应该在这里更好地满足您的需求。
  • 我建议将问题标题更改为:“如何在 Spring 中初始化字符串属性列表?”
  • 标签:弹簧、属性、spel ;)
  • 更好:“如何将(单个)属性加载到字符串列表中?”

标签: java spring


【解决方案1】:

@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;

【讨论】:

    猜你喜欢
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 2018-10-09
    • 2015-04-15
    相关资源
    最近更新 更多