gpt4 book ai didi

spring - 为什么我们需要在 spring-boot-starter-jersey 项目中为 Jersey 资源提供 @Component spring 注解?

转载 作者:行者123 更新时间:2023-12-01 01:58:59 24 4
gpt4 key购买 nike

这个问题是关于样本的:
https://github.com/spring-projects/spring-boot/blob/master/spring-boot-samples/spring-boot-sample-jersey/src/main/java/sample/jersey/Endpoint.java

为什么我们在使用 spring-boot -starter-jersey 项目时需要为 Jersey 资源添加“@Component”注解?

如果我删除它,Jersey servlet 仍然可以提供资源。

那么“@Component”有什么用呢?

最佳答案

你不需要它。泽西使用 HK2因为它是内部 DI 框架,而 HK2 有一个 Spring bridge .这是内部用于将 Spring 组件桥接到 HK2 IoC 容器中的内容,以便可以将它们注入(inject)到 Jersey 组件中。 Jersey 实现了 AutowiredInjectionResolver 1 允许使用 @Autowired 注入(inject) Spring 组件.你甚至不需要@Autowired尽管。所有Spring组件都可以正常注入(inject)@Inject .

我遇到的唯一缺点是没有将 Jersey 组件设为 Spring @Component是不支持@Value当你想注入(inject)属性值时。

我不喜欢的一件事是,当您将某事声明为 Spring @Component ,它会自动使其成为单例。但是 Jersey 资源默认是请求范围的。您可以添加 Spring @Scope("request") ,并且它应该将资源更改为请求范围的资源。 Jersey 有 declared the Spring RequestScope ,所以我们可以使用它。它与 Jersey 的请求范围到底有什么关系,我不能百分百确定。前段时间我遇到了一个问题。我不记得它是什么了,但这让我再也无法使用 Spring 请求范围。

假设我想保持所有资源请求的范围,我会坚持正常的 Jersey 请求范围,并且无法注入(inject) @Value s,不得不使用 Spring 的请求范围。也许我在想象事情,使用它没有问题,但就我个人而言,我会坚持我所知道的工作:-)

更新

如果您不将资源设为 Spring @Component,则另一件事不起作用是 Spring 的 AOP。这对我来说很好,因为 HK2 也有 AOP。

1 - 一个 InjectionResolver允许您使用自定义注释来创建注入(inject)目标。

关于spring - 为什么我们需要在 spring-boot-starter-jersey 项目中为 Jersey 资源提供 @Component spring 注解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38133680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com