gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:22:18 26 4
gpt4 key购买 nike

我整个努力的目标是尝试将数据源注入(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/

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