1、场景
我是编写了一个RedisUtils工具类,RedisUtils中实现了存储、获取、删除操作redis的方法。
项目启动后在Controller层使用@Resource注入RedisUtils成功,可以使用RedisUtils中的所有方法,但是当我在一个Shiro的配置类中使用@Resource注入RedisUtils却为null,如下图示所示:
可以确定的是RedisUtils工具类已经交给spring进行了管理,但是唯独在这个位置获取不到,具体原因还不太清楚,如有伙伴了解可以交流下。
2、解决
既然RedisUtils已经在spring工厂中,注解的方式不行那么我们就换另外一种方式来获取这个bean对象。
首先创建ApplicationContextUtils配置类
package com.boc.ljh.utils;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
* 配置获取工厂中bean对象
*/
@Component
public class ApplicationContextUtils implements ApplicationContextAware {
private static ApplicationContext context;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.context = applicationContext;
}
//根据bean名字获取工厂中指定的bean对象
public static Object getBean(String beanName) {
return context.getBean(beanName);
}
}
然后使用ApplicationContextUtils中的getBean()方法即可
注意:
- bean名称首字母要小写
- 获取的bean对象强转为需要的对象