Spring IOCとDIにおけるその注釈の詳細
5361 ワード
一.IOCとDI 1.IoC:オブジェクトの作成権をSpringコンテナに反転すること.技術ではなく、MVCのようなデザイン思想です.もともとプログラムで手動でオブジェクトを作成していた制御権をSpringフレームワークに渡して管理する.コントロール:呼び出し元がオブジェクトを使用する必要がある場合は、そのオブジェクトの作成を担当する必要があります.リバースコントロール:呼び出し元はSpringコンテナから使用するオブジェクトを取得するだけで、オブジェクトの作成プロセスに関心を持たず、つまりオブジェクトを作成する制御権をSpringフレームワークに反転します. 2.DI:Dependency Injection(依存注入):Springがオブジェクトを作成する過程で、オブジェクト依存属性(単純値、集合、オブジェクト)を構成によってそのオブジェクトに値を設定することを指す.IoCとDIは実は同じ概念の異なる角度の記述であり、DIはIoCに対して、「被注入オブジェクト依存IoCコンテナ構成依存依存オブジェクト」を明確に記述している. 3.Container:コンテナ、生活の中で容器は物を盛る器で、プログラム設計の角度から対象を詰める対象と見なし、対象に対する預け入れ、取り出しなどの操作があるため、容器は対象のライフサイクルを管理しなければならない.二.DI注入方式1.オブジェクト注入(setterとコンストラクタ注入)手動組立(XML bean方式)自動組立(注釈方式). 2.属性注入はbean要素のサブ要素設定を使用します.単純なタイプの値で、valueを直接使用して値を割り当てます.参照タイプ、refを使用して値を割り当てます.集合タイプは、対応する集合タイプ要素を直接使用すればよい.Springは属性のsetter法によって値を注入する.プロファイルで構成されている値はstringであり、springが自動的にタイプの変換属性を完了できる設定値はinitメソッドが実行される前に完了します.
三.Springが提供する組立ラベル:AutowiredとQualifierラベル:1.@Autowiredラベルを使用すると、Springコンテナからプロパティに必要なオブジェクトを自動的に見つけ、そのプロパティに注入できます.2.サードパーティプログラム:Spring 3.0の前に@Autowired解析注記プログラムを手動で設定する必要があります.Springは@Autowiredラベルの解析プログラムを自動的に追加します.Spring 3.0から、構成を変更する必要がなくなります.Springのテスト環境でも@Autowiredの解析コードが見つからない場合は、ページを構成する必要があります. 3.@Autowiredラベルは、フィールドまたはsetterメソッドに貼り付けられます.4.@Autowiredでは、1つのアトリビュートに複数のオブジェクトを同時に注入できます. public void setXxx(OtherBean1 other1,OtherBean2 other2) {} 5.@Autowiredラベルを使用して、BeanFactory、ApplicationContextなどのSpringに組み込まれた重要なオブジェクトを注入します. 6.テストクラス:@RunWith(SpringJUnit 4 ClassRunner.class)@ContextConfiguration public class SpringTest{@Autowired private ApplicationContext ctx; } 6.既定では、@Autowiredラベルで対応するオブジェクトを見つける必要があります.この問題を回避するには、required=falseを使用します:@Autowired(required=false)7.@Autowiredがbeanを探す方法:1)、まず依存オブジェクトのタイプに従って探し、見つけたらsetterメソッドまたはフィールドを使用して直接注入します.2)、Springコンテキストで複数の一致するタイプが見つかった場合、名前に従って探し、一致していない場合はエラーを報告します.3)、@Qualifier(「otherBean」)ラベルを使用することで、依存オブジェクトをbeanのid+タイプに従って探すことを規定することができる.四.JavaEE提供の組立ラベル:@Resourceラベル:1.@ResourceタグはJavaEE仕様のタグです.フィールドまたはsetterメソッドにも使用できます.一致するオブジェクトが必要です. 5.@Autowiredラベルの解析器も@Resourceの解析器も導入しました. 2.@Resourceタグでbeanを探す方法:1)まず名前で探し、見つけたらsetterまたはフィールド注入を使用します.2)、名前通りに見つからない場合は、タイプ別に探しますが、複数のマッチングタイプが見つかったら、エラーを報告します.3)name属性を直接使用してbeanの名前を指定できます.しかし、指定したnameはnameに従って探すしかなく、見つからない場合はタイプに従って探すことはありません.五.ラベルを使用してIoCを簡略化するには:
1.ラベルを使ってIoCを完成するには、IoCラベルの解析器が必要です:context:component-scanを使ってspringをスキャンする管理するbean base-packageはspringに教えて、どのパッケージとそのサブパッケージの中でbeanをスキャンして、もし複数のパッケージがスキャンする必要があるならば;複数のパケットをカンマで区切るだけでよい.Beanの注記:@Componentのデフォルトでは、クラスの名前(頭文字小文字をbeanの名前として)を直接使用します.beanの名前を変更する場合は、valueプロパティを直接使用してbeanの名前@Component(「otherbean」)3を再定義します.@Componentの使用制限:1)静的ファクトリメソッドとインスタンスファクトリメソッドは使用できませんが、FactoryBeanに使用できます.2)、ソースコードのないクラス(フレーム内の事前定義クラス)については、XMLのみで構成できます.4.beanコンポーネント版型ラベルbeanコンポーネント版型:@Serviceはビジネス層コンポーネントを表示するために使用されます.@Controllerはstrutsのactionなどの寸法制御層コンポーネント、@Repositoryはデータアクセスコンポーネント、すなわちDAOコンポーネントを寸法するために使用されます.@Componentは、コンポーネントが分類しにくい場合に、この注釈を使用して寸法を付けることができます.5.beanの使用ドメインを指定します:@Scope("prototype")6.初期化と破棄方法@PostConstruct public void init(){@PreDestroy public void destory()に相当{7.xmlを選択するか注釈を選択するか:1),Annotation:使いやすく,XMLファイルは小さいが,依存関係は再びコードに戻った;2),XML:使用はやや複雑であるが,コードはきれいで,コードはフレームワークに関係しない;XMLセキュリティ;
set1
set2
set3
list1
list2
list3
arr1
arr2
arr3
v1
v2
v3
@Setter
@Getter
public class Employee {
private Long id;
private String name;
private Integer age;
private String address;
}
@Setter
@Getter
public class CollectionBean {
private Set set;
private List list;
private String[] array;
private Map map;
private Properties pro;
}
三.Springが提供する組立ラベル:AutowiredとQualifierラベル:1.@Autowiredラベルを使用すると、Springコンテナからプロパティに必要なオブジェクトを自動的に見つけ、そのプロパティに注入できます.2.サードパーティプログラム:Spring 3.0の前に@Autowired解析注記プログラムを手動で設定する必要があります.Springは@Autowiredラベルの解析プログラムを自動的に追加します.Spring 3.0から、構成を変更する必要がなくなります.Springのテスト環境でも@Autowiredの解析コードが見つからない場合は、ページを構成する必要があります. 3.@Autowiredラベルは、フィールドまたはsetterメソッドに貼り付けられます.4.@Autowiredでは、1つのアトリビュートに複数のオブジェクトを同時に注入できます. public void setXxx(OtherBean1 other1,OtherBean2 other2) {} 5.@Autowiredラベルを使用して、BeanFactory、ApplicationContextなどのSpringに組み込まれた重要なオブジェクトを注入します. 6.テストクラス:@RunWith(SpringJUnit 4 ClassRunner.class)@ContextConfiguration public class SpringTest{@Autowired private ApplicationContext ctx; } 6.既定では、@Autowiredラベルで対応するオブジェクトを見つける必要があります.この問題を回避するには、required=falseを使用します:@Autowired(required=false)7.@Autowiredがbeanを探す方法:1)、まず依存オブジェクトのタイプに従って探し、見つけたらsetterメソッドまたはフィールドを使用して直接注入します.2)、Springコンテキストで複数の一致するタイプが見つかった場合、名前に従って探し、一致していない場合はエラーを報告します.3)、@Qualifier(「otherBean」)ラベルを使用することで、依存オブジェクトをbeanのid+タイプに従って探すことを規定することができる.四.JavaEE提供の組立ラベル:@Resourceラベル:1.@ResourceタグはJavaEE仕様のタグです.フィールドまたはsetterメソッドにも使用できます.一致するオブジェクトが必要です. 5.@Autowiredラベルの解析器も@Resourceの解析器も導入しました. 2.@Resourceタグでbeanを探す方法:1)まず名前で探し、見つけたらsetterまたはフィールド注入を使用します.2)、名前通りに見つからない場合は、タイプ別に探しますが、複数のマッチングタイプが見つかったら、エラーを報告します.3)name属性を直接使用してbeanの名前を指定できます.しかし、指定したnameはnameに従って探すしかなく、見つからない場合はタイプに従って探すことはありません.五.ラベルを使用してIoCを簡略化するには:
1.ラベルを使ってIoCを完成するには、IoCラベルの解析器が必要です:context:component-scanを使ってspringをスキャンする管理するbean base-packageはspringに教えて、どのパッケージとそのサブパッケージの中でbeanをスキャンして、もし複数のパッケージがスキャンする必要があるならば;複数のパケットをカンマで区切るだけでよい.Beanの注記:@Componentのデフォルトでは、クラスの名前(頭文字小文字をbeanの名前として)を直接使用します.beanの名前を変更する場合は、valueプロパティを直接使用してbeanの名前@Component(「otherbean」)3を再定義します.@Componentの使用制限:1)静的ファクトリメソッドとインスタンスファクトリメソッドは使用できませんが、FactoryBeanに使用できます.2)、ソースコードのないクラス(フレーム内の事前定義クラス)については、XMLのみで構成できます.4.beanコンポーネント版型ラベルbeanコンポーネント版型:@Serviceはビジネス層コンポーネントを表示するために使用されます.@Controllerはstrutsのactionなどの寸法制御層コンポーネント、@Repositoryはデータアクセスコンポーネント、すなわちDAOコンポーネントを寸法するために使用されます.@Componentは、コンポーネントが分類しにくい場合に、この注釈を使用して寸法を付けることができます.5.beanの使用ドメインを指定します:@Scope("prototype")6.初期化と破棄方法@PostConstruct public void init(){@PreDestroy public void destory()に相当{7.xmlを選択するか注釈を選択するか:1),Annotation:使いやすく,XMLファイルは小さいが,依存関係は再びコードに戻った;2),XML:使用はやや複雑であるが,コードはきれいで,コードはフレームワークに関係しない;XMLセキュリティ;