Tengo una clase de servicio web de Jersey, por ejemplo:
@Service
@Path("/serv")
public class Service {
@Autowired
@Qualifier("dao")
Dao dao;
@GET
@Path("/get")
public Response get(@QueryParam("hash") String hash) {
// ...
}
}
Ahora funciona el auto-cableado, porque yo uso jersey-spring3
como se describe aquí:
https://jersey.java.net/documentation/latest/spring.html
También tengo el Servlet habitual en web.xml:
<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.test.rest</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Los frijoles están cableados, todo fresco. El problema es que la propia clase de servicio no parece ser administrada por Spring.
Entonces, cuando intento anotar el servicio JAX-RS, digamos con @Timed
anotación de métricas, la llamada no es interceptada por AOP.
¿Puedo de alguna manera superar el problema? Me gustaría que Spring pudiera "ver" las llamadas a los métodos de servicio; Service::get
en el ejemplo anterior.
Respuestas
1 para la respuesta № 1Si está utilizando la configuración de Java, necesita obtener las clases de servicio de Spring para entregar a Jersey. Algo como:
public class JerseyProductConfig extends ResourceConfig {
@Inject
public JerseyProductConfig(ServletContext servletContext) {
WebApplicationContext springFactory = WebApplicationContextUtils.getWebApplicationContext(servletContext);
register(springFactory.getBean(YourResource.class));
}
}
Tenga en cuenta que encontré esta solución en algún lugar en stackoverflow pero no puedo encontrar la publicación.