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