用的shiro+Oauth2
Oauth2在调取redis工具类时候一直报错,报空指针
原代码:
改成:
拦截器在SpringContext初始化之前就执行了,Bean初始化之前它就执行了,所以它肯定是无法获取SpringIOC容器中的内容的。那么我们就让拦截器执行的时候实例化拦截器Bean,在拦截器配置类里面先实例化拦截器,然后再获取就能解决这个问题了
ok
如果还是报拦截器内使用redisTemplate空指针的错误!!!那就:使用注解@Lazy
@Bean
public Oauth2Filter getOauth2Filter() {
return new Oauth2Filter();
}
@Bean("shiroFilter")
@Lazy
public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
shiroFilter.setSecurityManager(securityManager);
重新启动,ok!!!redis查询成功!!!
延迟初始化来解决。延迟初始化会在IOC的时候先给出一个代理类,IOC之后的AOP这个BeanPostProcessor会正常地给它处理。
具体做法
加一个注解即可:@Lazy。可以在两个地方加这个注解:字段、方法参数。
方法1:加到字段上
方法2:加到构造方法的参数上