如何使用AutoWired将Spring bean注入ContainerRequestFilter?

时间:2018-07-03 11:15:42

标签: java spring filter resteasy

我正在使用RESTEasy 3Spring 4,并尝试将@Autowired服务bean注入到我的拦截器中,如下所示:

但是运行此代码,在访问我的访问服务时会返回Null Pointer Exception

@Provider
@MyAnnotationToIntercept
public class MyInterceptor implements ContainerRequestFilter {


    private MyAccessService accessService;

    @Autowired
    public MyInterceptor(MyAccessService accessService) {
        this.accessService = accessService;
    }

    public MyInterceptor() {
    }

    @Override
    public void filter(ContainerRequestContext requestContext) {

        // DO SOME STUFF Using accessService
    }
}


@Component
public class MyAccessService {

    private MyDep1 dep1;

    @Autowired
    public MyAccessService(Mydep1 dep1) {
        this.dep1= dep1;
    }

}

有什么办法可以做到这一点?真的有可能吗?

2 个答案:

答案 0 :(得分:0)

您将需要使用WebApplicationContextUtils的方法在过滤器内部获取一个不受spring管理的bean。这是示例

MyAccessService myAccessService = (MyAccessService) WebApplicationContextUtils.getRequiredWebApplicationContext(httpServletRequest .getServletContext()).getBean(MyAccessService.class);

要获取HttpServletRequest实例,您可以使用@context注入

  @Context
  private HttpServletRequest httpServletRequest ;

答案 1 :(得分:0)

好像您将@Autowired注释放置在错误的位置。它应该在accessService的声明之上。并且取决于您如何配置应用程序上下文,您可能会/可能不需要accessService实例变量的setter方法。