在spring boot 的filter中获取bean
在项目中遇到的一个坑,因为业务需要,在filter中要获取service对象,开始通过注解自动注入,一切写完之后在eclipse里运行完全没问题,可是放到服务器上运行就报空指针,说是service对象为空。考虑了半天觉得是在filter中通过注解注入bean失败,后来换来一种获取service对象的方式,就是通过ApplicationContextAware 这个接口去获取。
这就是他的实现类
@Component
public class SpringUtils implements ApplicationContextAware{
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
if(SpringUtils.applicationContext == null){
SpringUtils.applicationContext = applicationContext;
}
}
public static ApplicationContext getApplicationContext(){
return applicationContext;
}
//根据name
public static Object getBean(String name){
return getApplicationContext().getBean(name);
}
//根据类型
public static <T> T getBean(Class<T> clazz){
return getApplicationContext().getBean(clazz);
}
public static <T> T getBean(String name,Class<T> clazz){
return getApplicationContext().getBean(name,clazz);
}
}
在filter里获取service实例
AdminService adminService = (AdminService) SpringUtils.getBean(“adminServiceImpl”);
传的参数就是要获取的service实现类的@Service 注解的value值
@Service(value=”adminServiceImpl”)
public class AdminServiceImpl implements AdminService
以上就是解决这个坑的一个方法!在这里记录一下!其实最终也没搞明白用注解注入,为什么在eclipse里运行可以,放到服务器上就不行!