0

これは私のコードです(もちろん、単なる例です):

Employee manager = new DefaultEmployee(/* dependencies */);
Budget budget = new DefaultBudget(/* dependencies */);
Project project = new DefaultProject(manager, budget);

DefaultProjectと に依存しEmployeeBudgetいる、それらは何か他のものに依存している、などなど。(例のように) ハードコードすることも、何らかの構成 (XML または YAML など) と実行時にそのような階層を作成できるビルダーを使用することもできます。Spring Framework 以外に利用可能なソリューションはありますか?

依存性注入を提供しないでください。

コンシューマにはコンテナへのリンクがないため、このスニペットは依存性注入の設計パターンとは何の関係もありません。さらに、コンテナーはまったくなく (これは DI パターンの静的コンポーネントであり、OOP 原則の残忍な違反です)、制御の反転はありません。

4

1 に答える 1

0

ObjectFactoryメソッドを提供するを作成できます<T> T getInstance(T Interface)

次に、ファクトリは、渡されたインターフェイスの実装を検索し、インスタンス化して返します。はObjectFactory、インスタンス化するオブジェクトのコンストラクターを考慮して、さらに実装を検索します。これはほとんど反射ですが、機能します。私はすでにこれをプロジェクトで使用しています。

あなたの例では、呼び出す必要があります

Project project = objectFactory.getInstance(Project.class);

ObjectFactory実装 ( DefaultProject) を見つけ、コンストラクターに と が必要であることを確認EmployeeBudgetます。したがって、 をインスタンス化する前に、それら (および)DefaultProjectの実装を検索してインスタンス化します。ここでは再帰を使用する必要があります。DefaultEmployeeDefaultBudget

于 2012-12-10T09:50:54.943 に答える