-1

データを処理する必要があるたびに Task クラスのインスタンスを作成するアプリケーションがあるとします。タスク インスタンスには他のサービスが注入されていますが、このすべてのサービスとタスク オブジェクト自体は、1 つのタスク インスタンス内で一意です。もちろん、一部のグローバル サービスもインジェクトされていますが、それらは真のアプリケーション全体のシングルトンです。だから私の質問は、そのローカル (またはスコープ) シングルトン インスタンスの注入を構成する最良の方法は何ですか? 私は主に子コンテキストを使用することを考えていますが、それを適切に構成する方法はまだ問題です。もう 1 つ言及することは、注釈と Java ベースの構成を使用することです。

4

4 に答える 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 に答える