我正在開發一個基於Spring的應用程序,它註冊了一個自定義作用域「任務」。這個想法是,當一個新任務開始時,Spring應該提供任務範圍的對象。Spring - 運行時註冊scoped bean
該任務在運行時實例化。它以一個Properties
對象的形式提供了一些配置。我想用ApplicationContext
註冊該對象,但在任務範圍內,以便該範圍內的所有bean都可以引用該特定任務的配置。
下面是在代碼中粗略的想法:
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);
}
}
我想不通我怎麼能註冊在ApplicationContext
一個bean是適當的作用域。
謝謝
更新:
下面是一些更多的代碼來解釋這個問題好一點。 SomeScopedBean
應該做與配置的東西它提供豆,看起來是這樣的:
public class SomeScopedBean {
@Autowire
public SomeScopedBean (Properties configuration) {
// do some work with the configuration
}
}
應用程序的想法是,它應該有不同的配置下運行的MyTask
多個實例,每個任務本身就是範圍。在每個任務的範圍內,應該有1個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);
// ...
}
}
http://memorynotfound.com/spring-custom-scope-creating-and-implementing-threadscope/ – StanislavL
@StanislavL,我已經得到了實現的定製範圍,它工作正常。問題是如何在運行時註冊一個scoped bean。 – artemb
您是否嘗試過使用'scope = prototype'來創建類的新實例,無論它被注入到哪裏? –