java - 为什么将 Spring DI 添加到 Jersey 1.19.1 会使我的资源成为单例?

标签 java spring dependency-injection singleton jersey-1.0

我整个努力的目标是尝试将数据源注入(inject)到可以在运行时更改的资源中。如果可能的话,我试图避免使我的资源内的逻辑变得臃肿。

这是一个使用 Spring 4.1.9.RELEASE 的 Jersey 1.19.1 遗留应用程序(spring-aop、spring-beans、spring-context、spring-core、spring-express、spring-web)

这是我的示例资源:

@Path("/test)
public class TestResource {
  public TestResource(){
     System.out.println("Constructor Hit");
  }
}

如果我运行点击此资源,我会得到以下输出

...request...
Constructor Hit
...request...
Constructor hit

因此,每次有请求时都会创建资源,太棒了!

现在,我想使用spring向这个资源注入(inject)一个bean,所以我得到了以下类。

@Path("/test)
@Component
public class TestResource {
  @Inject
  public TestResource(MyBean test){
     System.out.println("Constructor Hit");
  }
}

现在我得到以下输出

Constructor hit
...request...
...request...

该资源仅创建一次(我猜是在 Spring 应用程序创建时)。

有办法解决这个问题吗?我相信这是因为我用 @Component 进行注释,但如果没有它,我似乎无法获得注入(inject)部分。

最佳答案

Spring 的默认范围是单例。当您在单例中调用原型(prototype)类时,Spring DI 在实例化时仅注入(inject)一次原型(prototype)类。 读这个issue如果您希望单例 bean 在运行时获得原型(prototype) bean 的新实例。

关于java - 为什么将 Spring DI 添加到 Jersey 1.19.1 会使我的资源成为单例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38723998/

相关文章:

java - 处理来自 Java ExecutorService 任务的异常

java - 如何舍入数学方程式的答案

java在对象上同步与在this上同步

javascript - 将 JavaScript 文字传递给 :onclick 时,Thymeleaf 找不到我的变量

java - 注入(inject)有问题

java - RESTEasy + Spring 3 + Maven

java - Spring Data MongoDB - 将二进制数据附加到现有的 GridFS 文件

java - 基于 SAP Hybris 的电子商务平台配置

java - CDI 注入(inject)不明确的依赖关系 "pick any, i don' t care"

java - Guice log4j 自定义注入(inject)不支持在构造函数内进行日志记录