2

プロパティに @Value アノテーションを追加するかどうか疑問に思っています。このプロパティを含むクラスは、別の値を持つ別のクラスでは使用できません。例:

MyClassUtil.java が持っていた

@Value("${some.value}")
private int _myProperty;

もちろん、以下を含む module.properties が 1 つあります。

some.value=10

別のクラス ClassA.java は、このクラスを値 10 で使用しようとしています。問題ありません。しかし、別のクラス ClassB.java がこのクラスを使用しようとしていますが、別の値 : 20 を使用しています。間違っていなければ、これを行うことはできません。@Value 時代以前は、moduleContext.xml で 2 つの Bean を問題なく宣言できたからです。

では、@Value は強力な結合を行うように促しますか?

4

1 に答える 1

2

アノテーション構成をインスタンス固有にすることはできません。Bean ファクトリでのBean 定義の概念を理解することが重要です。

手動 Bean の定義:

  • XML 構成内の単一<bean>の要素は、単一の Bean 定義につながります。複数<bean>とは、複数の定義を意味します (Bean タイプに関係なく)。
  • クラス内の単一の@Beanメソッドは@Configuration、単一の Bean 定義につながります。複数@Beanのメソッドは、複数の定義を意味します (Bean タイプに関係なく)。

ただし、component scan@Componentを使用すると、 のようなアノテーションが付けられたクラスは、単一の Bean 定義として自動登録されます。component scanを介して Bean を複数回登録する方法はありません。

同様に、注釈構成( @Value@Autowiredなど) は型全体です。Bean インスタンスは常に同じ効果 (同じ値の注入など) で拡張および処理されます。インスタンスごとに注釈処理の動作を変更する方法はありません。

これは密結合ですか?それは一般的な理解ではありません.bean factory(Spring)は、適切と思われるものを自由に注入できます。ただし、これはサービス ルックアップパターンに近いものです。これにより、ドメイン固有のシングルトンを使用する際の作業が簡素化されます。また、アプリケーション コンテキスト内のほとんどの Bean はシングルトンである傾向があり、その多くはドメイン固有 (コントローラー、サービス、DAO) です。フレームワーク シングルトン (プロジェクト固有ではない再利用可能なクラス) は、アノテーション ベースの構成を使用しないでください。この範囲では、望ましくない密結合です。

別の Bean インスタンスが必要な場合は、アノテーション構成を使用して手動で Bean を定義しないでください。

于 2013-06-14T15:22:10.987 に答える