Springの@Autowired注記の詳細説明

4926 ワード

@Autowired注記を使用してアセンブリを行います.タイプに応じてのみ一致します.@Autowired注記は、メソッドに少なくとも1つのパラメータが必要であることを前提として、Setterメソッド、コンストラクション関数、フィールド、さらには一般的なメソッドに使用できます.@Autowiredは、配列および汎用の集合タイプを使用するために使用できます.次にSpringは、コンテナ内のすべてのタイプに一致するBeanを注入します.@Autowired寸法がMapタイプに作用する場合、MapのkeyがStringタイプの場合、Springはコンテナ内のすべてのタイプがMapのvalueに対応するタイプのBeanを追加し、BeanのidまたはnameをMapのkeyとします.
@Autowired寸法が通常のメソッドに作用すると、コンテナがBeanインスタンスを初期化するときに呼び出される副作用が発生します.もちろん,自動アセンブリが実行されることが前提であり,アセンブリ条件を満たさない場合には,この方法も実行されない.
@Autowiredがマークされていると、自動注入が満たされないため、例外が放出されます.@Autowired寸法にrequired=false属性を追加して、この動作を変更できます.また、クラスごとにコンストラクション関数が1つしかない@Autowired.required()プロパティはtrueです.さもないと問題が発生します.@Autowiredで複数のコンストラクション関数が同時にマークされている場合、Springはコンストラクション関数(コンストラクション関数が最も長い)に欲張りアルゴリズムを使用します.
@Autowiredのもう1つの役割は、BeanFactoryタイプ、ApplicationContextタイプ、ResourceLoaderタイプ、ApplicationEventPublisherタイプ、MessageSourceタイプにマークすると、Springはこれらのインプリメンテーションクラスのインスタンスに自動的に注入され、額外の操作は必要ありません.
@Autowired(required=false) 
 @Qualifier("ppp") 
 public void setPerson(person p){}

@Qualifierはメソッドのパラメータとしても機能します(メソッドに1つのパラメータしかない場合は、@Qualifer寸法をメソッド宣言の上に配置できますが、パラメータの前に配置することを推奨します).たとえば、次のようになります.
@Autowired(required=false) 
 public void sayHello(@Qualifier("ppp")Person p,String name){}
               Bean   qualifier   ,    :
 "person" class="footmark.spring.Person"> 
    "ppp"/> 
 

Beanのqualifier名が明示的に指定されていない場合、デフォルトの名前はBeanの名前です.通常、qualifierは「domain」、「persistent」などのビジネスの意味を持つべきで、「person」のような方法ではない.
また、@Qualifierをコレクションタイプにマークすると、指定した値と同じ名前のBeanがすべて注入されます.
<bean class="footmark.HelloWorld"> 
 <qualifier type="MovieQualifier"> 
 <attribute key="format" value="VHS"/> 
 <attribute key="genre" value="Comedy"/> 
 qualifier> 
 bean> 
 <bean class="footmark.HelloWorld"> 
 <meta key="format" value="DVD"/> 
 <meta key="genre" value="Action"/> 
 bean>

@Autowired注記の後処理登録は、プロファイルに次の行を追加するだけで前と同じです.
@Autowiredのデフォルトはタイプ別に組み立てられています.デフォルトでは依存オブジェクトが存在する必要があります.null値を許可する場合は、そのrequiredプロパティをfalseに設定できます.たとえば、@Autowired(required=false)