java - 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 注释是否在列表初始化之前注入值?使用注释加载类时如何确定评估顺序?
解决方案
@Value 注释是否在列表初始化之前注入值?
很不幸的是,不行!“实例初始化程序”(类/对象主体)在“构造函数”之前执行,spring 没有机会在那里注入任何东西。
使用注释加载类时如何确定评估顺序?
-> https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans
你也可以@PostConstruct
用纯spel驱逐:
// 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;
推荐阅读
- python - ValueError:数据必须为正(boxcox scipy)
- qt - 如何在 WebEngineView 中呈现的 html 文件中弹出文件对话框/打印对话框?
- ruby-on-rails - 单个型号的carrierwave多个上传器
- java - java中实例变量和实例的区别
- sql - 水晶公式:具有多个条件的 if/then/else 语句
- javascript - 理解 NodeJS 中的异步和 Promise
- python - AttributeError:“元组”对象没有属性“emp_info”
- firebase - 如何使用 Firebase 在 Flutter 中进行电话身份验证?
- ruby - 使 Gem::Specification.find_by_name 返回正确的 gem 版本
- jpeg - 带有伪造霍夫曼表的 jpeg 可以恢复吗?