我有一个使用Spring和Jersey的Servlet 3.0 Web应用程序.我目前使用在Web.xml中配置为过滤器的SpringServlet以及使用@Path和注释的资源类进行设置@Component.这是web.xml片段:
<filter>
<filter-name>jersey-serlvet</filter-name>
<filter-class>
com.sun.jersey.spi.spring.container.servlet.SpringServlet
</filter-class>
<init-param>
<param-name>
com.sun.jersey.config.property.packages
</param-name>
<param-value>com.foo;com.bar</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.feature.FilterForwardOn404</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>jersey-serlvet</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)
这个设置有效,但我真的想让这个设置只有注释 - 没有web.xml配置.我的第一次尝试是删除上面的SpringServlet配置并创建一个扩展的类Application.这是一个片段:
@ApplicationPath("/*")
public class MyApplication extends PackagesResourceConfig {
public MyApplication() {
super("com.foo;com.bar");
HashMap<String, Object> settings = new HashMap<String, Object>(1);
settings.put(ServletContainer.FEATURE_FILTER_FORWARD_ON_404, true);
this.setPropertiesAndFeatures(settings);
}
}
Run Code Online (Sandbox Code Playgroud)
这是因为JAX-RS资源已经注册,我可以在它们的URL上点击它们,但是当它们尝试使用它们的自动装配属性时它们会抛出NullPointerExceptions ...这是有道理的,因为我猜测资源现在被加载了泽西岛并不是春季管理的豆类,因此没有自动装配.
尽管有一些搜索我无法找到任何方式将Jersey资源加载为只有注释的Spring bean. 有这样的方式吗? 我真的不想为资源编写一堆代码来手动获取Spring上下文并在我可以帮助时调用DI.
如果仅注释不起作用,那么如果我可以指定Application要加载的类而不是要扫描的包列表,那么我可以使用web.xml中的过滤器配置.如果我可以在那里摆脱包列表并只指定一个Application类实例,那么我会满足.
显然如果有人对我有明确的答案会很好,但我也会感激任何我可以看到的东西或尝试的东西的任何指示或提示.
谢谢,马特