Java Spring和Jersey筛选器-提供程序还是组件?

Java Spring和Jersey筛选器-提供程序还是组件?,java,spring,jersey,spring-boot,jax-rs,Java,Spring,Jersey,Spring Boot,Jax Rs,我试图确定spring boot、jersey以及jersey和spring boot上下文之间的关系 @Component public class CORSFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServl

我试图确定spring boot、jersey以及jersey和spring boot上下文之间的关系

@Component
public class CORSFilter implements Filter {


    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
        chain.doFilter(req, res);
    }

    public void init(FilterConfig filterConfig) {
    }

    public void destroy() {
    }


}
当我把它贴上@Provider的标签,并让Jersey在它为之生活的包中出现时,它没有找到它。当我将其设置为@组件时,它就会工作

@Configuration
@ApplicationPath("/api/v1")
public class JerseyConfig extends ResourceConfig{

    public JerseyConfig() {
        // DOESNT FIND MY CORSFilter as  Provider
        this.packages("com.mypackage.rest");
    }


}

@Configuration注释是否使JerseyContext成为Springbean?然后spring注入CORSFilter,因为它找到了过滤器类型的组件?这里发生了什么?

您正在实现一个servlet过滤器(implements filter),这意味着servlet容器正在实例化过滤器。当您提供@component注释时,它仍然是初始化此过滤器的servlet容器。只有spring上下文使用contextloader侦听器知道这一点

在jersey中,过滤器应实现
ContainerRequestFilter
ContainerResponseFilter
,以便jersey配置应用于URL路径等过滤器。 因为您使用了servlet过滤器,所以应该手动配置它