用三种方法实现@value 给静态变量赋值

2023-05-27 0 737

@Value注释如是说: 做为Spring的两个常见注释,其促进作用是透过注释将自变量、命令行中的值和其它bean的特性值转化成到表达式中,做为表达式的常量。

@Value(“${login.name}”) private String loginName;

@value无法间接转化成值给动态表达式

@Value(“${login.name}”) private static String loginName;

在Java中,动态表达式也称作类表达式。换句话说,它归属于两个类,而并非两个某一的示例。因而,类调用的这时候也将调用动态表达式恰好相反,类的示例 调用的这时候也将调用 示例表达式(非动态表达式)。类的大部份示例共享资源此类的动态表达式。

@value 是在 bean示例化时,在特性充填操作过程中展开表达式的,static调用要早在@value。

前述情景中,自变量须要透过命令行来实用性,该咋办?

第一种形式:

把@Value(value=”${local.file.temp.dir}”)放在动态表达式的set形式下面方可,须要特别注意的是set形式要拿掉static,除了是现阶段类要交予spring来管理

/**文档储存产品目录*/ public static String SAVE_PATH; //提过拿掉static @Value(“${local.file.temp.dir}”) public void setSavePath(String savePath){ SAVE_PATH = savePath; }

命令行:

local: file: temp: dir : /data/temp

第四种形式:

采用 @postconstruct

/**文档储存目录*/ public static String SAVE_PATH; @Value(“${local.file.temp.dir}”) public String SAVE_PATH_TEMP; @PostConstruct private void init(){ SAVE_PATH = SAVE_PATH_TEMP; } @GetMapping(“test”) public void test(){ System.out.println(SAVE_PATH); }

@PostConstruct 是在 bean 调用(initializeBean)操作过程中调用的,是在@value之后调用的,可以透过这种形式给动态表达式表达式。

第四种形式:

同时实现InitializingBean 接口

public class IndexController implements InitializingBean { /**文档储存产品目录*/ public static String SAVE_PATH; @Value(“${local.file.temp.dir}”) public String SAVE_PATH_TEMP; @GetMapping(“test”) public void test(){ System.out.println(SAVE_PATH); } @Override public void afterPropertiesSet() throws Exception { SAVE_PATH = SAVE_PATH_TEMP; } }

InitializingBean 接口也是在bean调用(initializeBean)操作过程中调用的,具体可以看下spring bean 的示例化操作过程。

采用 @value 注释读取命令行给动态表达式表达式的形式给大家如是说到这里,希望对大家有所帮助。

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务