我使用Dagger 2作爲我的DI框架,我正在爲它提供一個singleton類實例。如何使用Dagger在石英作業中注入依賴關係2
我也使用Quartz Scheduler來安排工作。有沒有辦法將singleton類注入到Quartz作業中?
匕首2模塊:
@Module
public class MyModule {
@Provides
@Singleton
Messager provideMessager() {
return new CustomMessager();
}
}
匕首2成分:
@Component(modules = MyModule.class)
@Singleton
public interface MyComponent {
Messager messager();
}
石英工作:
public class MyJob implements Job {
// @Inject
Messager messager;
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
messager.sendMessage("Hello.");
}
}
EDIT
我已經創建了一個MyJobScheduler
類調用石英工作:
public class MyJobScheduler {
public void scheduleJob() {
JobDetail myJob = JobBuilder.newJob(MyJob.class)
.withIdentity("myJobId", "Group1")
.build();
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("myTriggerId", "Group1")
.startNow()
.build();
Scheduler scheduler = new org.quartz.impl.StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(myJob, trigger);
}
}
EDIT 2
所以我設法將其配置爲工作,但我不知道這是正確的做法。
首先我創建了一個DependencyResolver
類,這是我作爲一個單使用:
public class DependencyResolver {
private static DependencyResolver _instance = null;
private static MyComponent _myComponent;
public static MyComponent getMyComponent() {
return _myComponent;
}
protected DependencyResolver() {
// Exists only to defeat instantiation.
}
public static void initialize() {
_myComponent = DaggerMyComponent.builder().build();
}
}
然後我稱爲在main
方法initialize方法:
DependencyResolver.initialize();
MyComponent myComponent = DependencyResolver.getMyComponent();
我在MyJob使用的DependencyResolver
類來獲得Messager
單例實例。
public class MyJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
MyComponent myComponent = DependencyResolver.getMyComponent();
Messager messager = myComponent.messager();
messager.sendMessage("Hello.");
}
}
這是解決此問題的正確方法嗎?任何輸入將不勝感激。
如何石英工作得到instantia特德? (這裏是'new MyJob()') –
@ThorbjørnRavnAndersen查看編輯。這是一個非常基礎的Quartz實現。 –