spring boot 中用@value给static变量赋值

需求:改写一个JedisUtils,工具类,所以最好用静态方法和变量。

@value("${redis.host}")

private static String redisHost;

运行后发现注入失败。解决办法:看了网上大家的说法,有用中间变量的,有用set方法赋值的。试了一下都是可以成功赋值的,

以下引用别人的代码:

给参数注入,执行set方法(这里注意set方法中的static要去掉)

public static String zhifuUrl;   
@Value("${zhifu.url}")  
public void setZhifuUrl(String url) {  
CrmUtil.zhifuUrl = url;  
}  

通过中间变量赋值:

public static String zhifuUrl;   
@Value("${zhifu.url}")  
private String zhifuUrlTmp;  
  
@PostConstruct  
public void init() {  
zhifuUrl = zhifuUrlTmp;  
}  

  

最后需要注意的是这个在类上要加@Component,才可以成功注入。

*********************************************************************************************************************************************************

@Value("${}") 可以获取对应属性文件中定义的属性值。

假如我有一个sys.properties文件 里面规定了一组值: web.view.prefix =/WEB-INF/views/

在springMvc.xml文件中引入下面的代码

<context:property-placeholder
 
ignore-unresolvable="true" location="classpath:sys.properties" />

  

这样就可以通过@Value("${web.view.prefix}")获取这个字符串,但是只能在springMvc.xml文件中扫描或者注册的bean中才能通过@Value("${web.view.prefix}")获取这个字符串,其他未在springMvc.xml扫描和定义的bean必须在相应的xml文件中引入上面代码才能使用@Value("${}”)表达式

再controller或者其他组件中通过下面代码即可获取“”/WEB-INF/views/“”这个字符串

	@Value("${web.view.prefix}")
	private String prefix; 

  

*********************************************************************************************************************************************************

当需要在某个类中定义一个属性,并且该属性是一个已存在的bean,要为该属性赋值或注入时在该属性上一行使用@Resource(name="xxx"),相当于为该属性注入一个名称为xxx的bean。

@Resource(这个注解属于J2EE的),默认安照名称进行装配,名称可以通过name属性进行指定, 
如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。 当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

@Resource(name="baseDao")     
private BaseDao baseDao; 

 

如BaseDao类使用@Value("${}”)获取了配置属性,则可以在其他类中使用@Resource注解标注这个类,然后get方法获取即可,不需要再次使用注解读取配置文件。