Я работаю над приложением Spring, которое регистрирует задачу настраиваемой области действия. Идея заключается в том, что при запуске новой задачи Spring должен поставлять объекты с областью.
Задача создается в среде выполнения. Он поставляется с некоторой конфигурацией в виде объекта Properties
. Я хочу зарегистрировать этот объект с помощью ApplicationContext
, но в пределах области задач, чтобы все beans внутри этой области могли ссылаться на конфигурацию этой конкретной задачи.
Вот приблизительная идея в коде:
public class MyTask extends SourceTask {
@Override
public void start(Map<String, String> props) {
context = ContextProvider.getApplicationContext();
// Initialize the scope
ConnectorTaskScope scope = context.getBean(ConnectorTaskScope.class);
scope.startNewTask();
// TODO register the props object in the context
// get an object which requires the properties and work with it
context.getBean(SomeScopedBean.class);
}
}
Я не могу понять, как я могу зарегистрировать bean в ApplicationContext
, который имеет соответствующую область видимости.
Спасибо
Update:
Вот еще несколько кодов, чтобы объяснить вопрос немного лучше. SomeScopedBean
должен делать что-то с конфигурацией, с которой он снабжен bean и выглядит примерно так:
public class SomeScopedBean {
@Autowire
public SomeScopedBean (Properties configuration) {
// do some work with the configuration
}
}
Идея приложения заключается в том, что он должен иметь несколько экземпляров MyTask
, работающих с другой конфигурацией, и каждая задача - это собственная область. В рамках каждой задачи должен быть один экземпляр SomeScopedBean
, инициализированный конфигурацией задачи.
public class MyApplication {
public static void main (String[] args) {
// ...
Properties config1 = loadConfiguration1();
Properties config2 = loadConfiguration2();
MyTask task1 = new MyTask();
MyTask task2 = new MyTask();
task1.start(config1);
task2.start(config2);
// ...
}
}