Я использую Dagger 2 в качестве рамки DI, и я предоставляю экземпляр класса Singleton с ним.Как ввести зависимость в задание кварца с помощью Dagger 2
Я также использую планировщик кварца, чтобы назначать задания. Есть ли способ ввести класс singleton в Quartz?
Dagger 2 модуля:
@Module
public class MyModule {
@Provides
@Singleton
Messager provideMessager() {
return new CustomMessager();
}
}
Dagger 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
I создали 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
:
DependencyResolver.initialize();
MyComponent myComponent = DependencyResolver.getMyComponent();
И я использовал DependencyResolver
в MyJob класса для получения экземпляра Singleton 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 См. редактирование. Это очень простая реализация кварца. –