データを処理する必要があるたびに Task クラスのインスタンスを作成するアプリケーションがあるとします。タスク インスタンスには他のサービスが注入されていますが、このすべてのサービスとタスク オブジェクト自体は、1 つのタスク インスタンス内で一意です。もちろん、一部のグローバル サービスもインジェクトされていますが、それらは真のアプリケーション全体のシングルトンです。だから私の質問は、そのローカル (またはスコープ) シングルトン インスタンスの注入を構成する最良の方法は何ですか? 私は主に子コンテキストを使用することを考えていますが、それを適切に構成する方法はまだ問題です。もう 1 つ言及することは、注釈と Java ベースの構成を使用することです。
4 に答える
0
私が最終的に思いついた解決策では、子コンテキストを作成する必要があります。重要なポイントは、親コンテキストが子コンポーネントの依存関係を認識しないように、異なる子構成を指定することです。最も簡単な解決策は、コンポーネント スキャンを有効にして別の Java 構成を作成し、それを専用パッケージに配置することです。
@Configuration
@ComponentScan
public class TaskConfig {}
public interface TaskFactory {
Task createTask();
}
@Component
public class TaskFactoryImpl implements TaskFactory {
private ApplicationContext parentContext;
@Autowired
public void setParentContext(ApplicationContext parentContext) {
this.parentContext = parentContext;
}
@Override
public Task createTask() {
try (AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext()) {
context.register(TaskConfig.class);
context.setParent(parentContext);
context.refresh();
return context.getBean(Task.class);
}
}
}
于 2014-01-20T03:06:15.150 に答える