动力节点首页 全国咨询热线:400-8080-105

绑定手机号,登录
手机号

验证码

微信登录
手机号登录
手机号

验证码

微信登录与注册
微信扫码登录与注册

扫码关注微信公众号完成登录与注册
手机号登录
首页 > 文章

Spring注入静态变量

03-31 22:18 1006浏览
举报 T字号
  • 大字
  • 中字
  • 小字

平时开发当中,需要封装工具类,工具类中的方法大多是静态的方法,而静态方法只能调用静态成员变量。静态变量并不属于对象的属性,而是属于类的属性,而Spring则是基于对象的属性进行依赖注入的。所以用注解注入静态变量是不可行的,会一直报NullPointerException

例如 :直接注入静态的redisTemplate是不行的

@Autowired
private static RedisTemplate<Object, Object> redisTemplate;

[点击并拖拽以移动]

解决方案

方法一: 在set方法上注入

@Component
public class RedisLockUtil {
    private  static  RedisTemplate<Object, Object> redisTemplate;
    @Autowired
    public  void setRedisTemplate(RedisTemplate<Object, Object> redisTemplate) {
        RedisLockUtil.redisTemplate = redisTemplate;
    }
 }

方法二: 使用@PostConstruct注解

@PostConstruct用于在完成依赖项注入以执行任何初始化之后需要执行的方法

@Component
public class RedisLockUtil {
 
    private  static  RedisTemplate<Object, Object> redisTemplate;
    @Autowired
    private  RedisTemplate<Object,Object> redisTemplate_copy;
    /**
     * 初始化 init
     */
    @PostConstruct
    public void init(){
      RedisLockUtil.redisTemplate=redisTemplate_copy;
    }
 }

或者

@Component
public  class RedisLockUtil {
    private static RedisLockUtil redisLockUtil;
    @Autowired
    private RedisTemplate<Object, Object> redisTemplate;
    /**
     * 初始化 init
     */
    @PostConstruct
    public void init(){
        redisLockUtil = this;
        redisLockUtil.redisTemplate = this.redisTemplate;
    }
}

注: 两种方法类上@Component一定要写上

0人推荐
共同学习,写下你的评论
0条评论
代码小兵959
程序员代码小兵959

5篇文章贡献15809字

相关课程 更多>

作者相关文章更多>

推荐相关文章更多>

Java面试题及答案整理

提枪策马乘胜追击04-21 20:01

Spring常见面试题

代码小兵92504-17 16:07

Java零基础实战项目——五子棋

代码小兵98804-25 13:57

Java string类详解

杨晶珍05-11 14:54

6道经典算法面试题

杨晶珍05-12 16:39

发评论

举报

0/150

取消