Java Spring配置和Resteasy

时间:2012-04-17 11:07:57

标签: spring resteasy

我正在努力整合Resteasy和Spring;我已经关注了Resteasy的文档和这篇文章:Inject Spring beans into RestEasy。 我让它在其余的类上使用@Autowire或其他Spring注释工作,但我想这样做,让我的休息类免于spring(或DI)依赖。 我也想通过java配置配置spring。在Spring配置中我添加了这个:

<context:component-scan base-package="package.where.spring.configuration.beans.are , package.where.rest.classes.are">
<context:include-filter type="annotation" expression="javax.ws.rs.Path"/>
</context:component-scan>

当然我在web.xml中,所以springContextLoaderListener选择了spring配置:

<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>classpath:/spring-config.xml</param-value>
</context-param>

删除@Autowire注释,如果我还删除第一个包(我通过Spring java配置配置注入),则不进行注入并且字段保持为空;如果我删除了第二个包,则其余类的URL不会被resteasy识别。

我想在Spring配置中配置注入,有没有办法让resteasy识别从外部配置的spring bean的路径?

编辑:我注意到我正在尝试做的是使用@Provider注释类,因为你正确配置了Spring:

 <context:component-scan base-package="my.package1 , my.package2">
    <context:include-filter type="annotation" expression="javax.ws.rs.ext.Provider"/>
 </context:component-scan>

但是这种谜语比我最初的想法更深刻......我更有信心我走在正确的轨道上并错过了一步!

2 个答案:

答案 0 :(得分:1)

更好的方法是使用JSR-330注释。

而不是@Autowired,更喜欢使用@Inject。 Spring支持JSR-330注释,并将在封面下使用Autowire实现。对于使用@Component@Service注释的Spring bean,只需使用JSR-330特定的@Named替换注释。

如果您正在使用maven,只需在pom.xml文件中包含以下内容即可。

<dependency>
    <groupId>javax.inject</groupId>
    <artifactId>javax.inject</artifactId>
    <version>1</version>
</dependency>

答案 1 :(得分:0)

使用JSR-250的@Resource代替@Autowired是向前迈出的一大步;它完成了@Autowired所需要的东西,它是JSR而不是Spring特定的。

可以很好地用于许多用途。