springboot 过滤器中用@Autowired 注解和@Value注解获取的实例为null 解决方案

1、解决@Autowired注解引用实例为null:
产生原因: Spring中,web应用启动的顺序是:listener->filter->servlet,先初始化listener,然后再来就filter的初始化,再接着才到我们的dispathServlet的初始化(即我们),因此,当我们需要在filter里注入一个注解的bean时,就会注入失败,因为filter初始化时,注解的bean还没初始化,没法注入。
解决办法:使用filter中的init()方法来在filter的生命周期中我们手动注入需要使用的Service;

@Component
@Slf4j
public class CusomerFilter implements Filter {

    private XxxxSerice xxxxSerice;

	//使用filter中的init()方法来在filter的生命周期中我们手动注入需要使用的Service;
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        ServletContext context = filterConfig.getServletContext();
        ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(context);
        xxxxSerice= ctx.getBean(XxxxSericeImpl.class);//你要注入的服务
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    	//xxxxx
        filterChain.doFilter(servletRequest,servletResponse);
    }

}

2、解决@Vaule注解读取配置文件信息为null
产生原因:Environment 用来表示整个应用运行时的环境,为了更形象地理解Environment,你可以把Spring应用的运行时简单地想象成两个部分:一个是Spring应用本身,一个是Spring应用所处的环境。
解决办法:

Environment environment = ctx.getBean(Environment.class);
String oauthOpen = environment.getProperty("oauth.open");
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值