我不喜欢的一件事是,当你宣布一个Spring @Component 时,它会自动使它成为一个单例 . 但泽西资源默认是请求作用域 . 您可以添加Spring @Scope("request") ,它应该将资源更改为请求范围的资源 . Jersey 有declared the Spring RequestScope,所以我们可以使用它 . 它究竟与Jersey有什么关系's request scope, I am not a hundred percent sure. I ran into a problem a while back. I can'记住它是什么,但这让我不再使用Spring请求范围 .
public class MyWebResource {
private int counter;
@GET
@Path("/counter")
@Produces(MediaType.APPLICATION_JSON)
public Response getCounter() {
counter++;
return Response.status(Status.OK).entity(counter).build();
}
}
2 回答
你不需要它 . Jersey使用HK2作为内部DI框架,HK2使用Spring bridge . 这是内部用于将Spring组件桥接到HK2 IoC容器中的内容,因此可以将它们注入到Jersey组件中 . Jersey实现了
AutowiredInjectionResolver
1,允许使用@Autowired
注入Spring组件 . 你甚至不需要@Autowired
. 可以使用正常的@Inject
注入所有Spring组件 .我遇到的唯一缺点是,当你想要注入属性值时,它不会使Jersey组件成为一个Spring
@Component
它不支持@Value
.我不喜欢的一件事是,当你宣布一个Spring
@Component
时,它会自动使它成为一个单例 . 但泽西资源默认是请求作用域 . 您可以添加Spring@Scope("request")
,它应该将资源更改为请求范围的资源 . Jersey 有declared the Spring RequestScope,所以我们可以使用它 . 它究竟与Jersey有什么关系's request scope, I am not a hundred percent sure. I ran into a problem a while back. I can'记住它是什么,但这让我不再使用Spring请求范围 .假设我想保留我的所有资源请求作用域,我会坚持正常的Jersey请求范围,并且无法注入
@Value
,而不必使用Spring 's request scope. Maybe I' m想象事物,并且使用它没有问题,但是我个人只会坚持我所知道的工作:-)1 - InjectionResolver允许您使用自定义注释来创建注入目标 .
当你删除@Component时,jersey会控制实例的范围 . 使用@Component创建一个单例实例,删除它可以使用以下泽西注释:
•请求范围(默认):通过使用@RequestScope注释或无,我们可以有一个生命周期,直到请求持续 . 这是根资源类的默认范围 . 对于每个新请求,首次创建并相应地提供新的根资源实例 . 但是,当调用相同的根资源方法时,旧实例将用于提供请求 .
•每个查找范围:@PerLookup批注为每个请求创建根资源实例 .
•Singleton:@Singleton注释允许我们在整个应用程序中只创建一个实例 .
使用课堂内的计数器尝试不同的行为......