我正在研究一些Java Jersey的东西,并希望做到以下几点;
我有一个名为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)来检索配置。
答案 0 :(得分:3)
您可以使用Immediate
范围
立即是一个像
javax.inject.Singleton
作用域一样运行的作用域,除了在添加相应的Descriptor
时创建实例。从定位器中删除相应的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);
}
}
另见: