springboot中使用Autowired或者Resource注入的bean

41次阅读

共计 755 个字符,预计需要花费 2 分钟才能阅读完成。

在 springboot 中使用 @Autowired 或者 @Resource 可注入 spring 托管的 bean。但当你需要将注入的这个 bean 声明为 static 时,因为 static 初始化在 spring 容器完成初始化之前,你将会得到一个 nullpointexception 异常。此处的 bean 注入就需要换一个方式。
解决步骤如下:
1. 在注入的类上添加 @Component 注解
2.@Autowired 注入非静态对象
3. 使用 @PostConstruct 注解初始化该对象 (给静态对象赋值)

示例如下:

// 让 springboot 在初始化的时候能扫描到
        @Component
public class JwtTokenUtil {
// 注入 RedisUtils 对象
    @Autowired
    private RedisUtils sredisUtils;
// 声明要使用的静态对象 redisUtils
    private static RedisUtils redisUtils;
// 初始化该静态对象
    @PostConstruct
    public void init(){redisUtils=sredisUtils;}
// 要使用 redisUtils 对象的静态方法
    public static void reletExpireTime(String account) {redisUtils.hset(account, JwtConstants.ACCOUNT_EXPIRATION, System.currentTimeMillis() + JwtConstants.EXPIRATION, JwtConstants.EXPIRATION / 1000);
        redisUtils.expire(account, JwtConstants.EXPIRATION / 1000);
    }
    
}
    以上代码只是示例该配置,请忽略其他 

正文完
 0