Java CDI从注入点所有者注入依赖项
我有一个名为Container的类:Java CDI从注入点所有者注入依赖项,java,cdi,Java,Cdi,我有一个名为Container的类: public class Container { @Inject ServiceA serviceA; @Inject ServiceB serviceB; } 服务B依赖于服务A: public class ServiceB { @Inject ServiceA serviceA; } 在我的应用程序中可以有几个容器。现在,有什么技巧可以将这个ServiceA实例注入ServiceB吗?它已经注
public class Container {
@Inject
ServiceA serviceA;
@Inject
ServiceB serviceB;
}
服务B依赖于服务A:
public class ServiceB {
@Inject
ServiceA serviceA;
}
在我的应用程序中可以有几个容器。现在,有什么技巧可以将这个ServiceA实例注入ServiceB吗?它已经注入到与ServiceB相同的容器实例中了。您应该为您的对象定义一个@Singleton范围。将@Singleton注释放入ServiceA类 比如说
@Singleton
public class ServiceA {
}
将类注释为
@ApplicationScoped
或@Singleton
,这将确保应用程序中只有一个ServiceA
实例。这个实例将在这个bean的第一次注入期间创建
另外,我更喜欢Weld中建议的
@ApplicationScoped
,因为@Singleton
没有代理对象,在序列化过程中可能会出现问题。您可以使用自定义作用域@ContainerScope“ContainerScopeExtension”创建CDI扩展
如何创建自定义范围可在此处阅读:
这种集装箱范围扩展的实施可以如下所示:
不是这样吗?您尝试了什么?@IanMcLaird:默认情况下,注入将在依赖范围内,并且每个可注入对象都有自己的依赖范围实例。至少,这是我的理解,这可能是错误的!不幸的是,我需要将
ServiceA
的不同实例注入到不同的容器
实例中,所以单例模式不是我的选择。我需要的是每个容器的单例模式,在这里,您可以使用每个JVM都是唯一的EJB单例(我不知道同样的事情是否适用于CDI单例),但我担心没有其他方法可以实现您想要的…但我认为整个应用程序也可能存在设计问题。。。