我正在使用RESTEasy 3
和Spring 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;
}
}
有什么办法可以做到这一点?真的有可能吗?
最佳答案
您将需要使用WebApplicationContextUtils
的方法在过滤器内部获取一个不受spring管理的bean。这是例子
MyAccessService myAccessService = (MyAccessService) WebApplicationContextUtils.getRequiredWebApplicationContext(httpServletRequest .getServletContext()).getBean(MyAccessService.class);
要获得
HttpServletRequest
实例,可以使用@context
注入 @Context
private HttpServletRequest httpServletRequest ;