2016-11-25 60 views
1

我正在研究一些Java泽西岛的东西,并希望做到以下几点:Java泽西在绑定时构造类

我有一个类调用SerialSubject:

public class SerialSubject{ 
    private final SomeDatabase someDatabase; 

    @Inject 
    public SerialSubject(SomeDatabase someDatabase){ 
     this.someDatabase = someDatabase; 
     initializeSerial(); 
    } 

    InitializeSerial(){ 
     SerialConfig config = SomeDatabase.getConfig(); 
     //Open a Serial connection using this config 
    } 
} 

我结合使用AbstractBinder这个类并将其注册到我的ResourceConfig按往常一样。

bind(SerialSubject.class).to(SerialSubject.class).in(Singleton.class) 

一切都很好,当资源请求并打开串行连接时,解析依赖关系。

现在警告:我想在启动时打开串行连接。有没有办法立即实例化类?手动构建它将不会执行,因为需要检索配置的数据库(已绑定到ioc)。

回答

3

您可以使用Immediate范围

即时是运作就像javax.inject.Singleton范围,除了实例一旦创建为它们对应的Descriptor s的添加范围。当相应的Descriptor从定位器中删除时,Immediate范围服务被销毁。特别是Immediate如果调用ServiceHandle.destroy()方法,范围服务不会被销毁。应注意与注入的即时服务的服务,他们也成为虚拟即时服务

bind(SerialSubject.class).to(SerialSubject.class).in(Immediate.class) 

您还需要将ServiceLocator配置,使直接范围。

public class JerseyApplication extends ResourceConfig { 

    @Inject 
    public JerseyApplication(ServiceLocator locator) { 
     ServiceLocatorUtilities.enableImmediateScope(locator); 
    } 
} 

参见: