-
需求描述:
编写一个操作Redis的工具类,在该类中需要注入org.springframework.data.redis.core.RedisTemplate
,然后在static方法中调用 redisTemplate
。
-
解决方法:
- 为静态属性设置非静态的setter
在RedisUtil中添加如下代码:
private static RedisTemplate<String, Object> redisTemplate;
public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate){
RedisUtil.redisTemplate = redisTemplate;
}
但是这样做需要一个揭露该setter的bean实例(笔者注:该方法还没实践过,方法2是可行的)。
- 通过org.springframework.beans.factory.config.MethodInvokingFactoryBean 来调用一个静态setter
在RedisUtil中添加如下代码:
private static RedisTemplate<String, Object> redisTemplate;
public static void setRedisTemplate(RedisTemplate<String, Object> redisTemplate){
RedisUtil.redisTemplate = redisTemplate;
}
在配置文件中添加如下配置:
<bean
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="staticMethod" value="org.project.utils.RedisUtil.setRedisTemplate" />
<property name="arguments">
<list>
<ref bean="redisTemplate" />
</list>
</property>
</bean>```
- ###参考:
1. [How to make spring inject value into a static field](https://stackoverflow.com/questions/11324372/how-to-make-spring-inject-value-into-a-static-field)
- ###补充:
欢迎大家分享你的想法和实践。