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");