我正在努力整合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>
但是这种谜语比我最初的想法更深刻......我更有信心我走在正确的轨道上并错过了一步!
答案 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特定的。
可以很好地用于许多用途。