まず、コンテナ関連
コアIOC(反転制御)は、簡単な方法依存コンポーネント(オブジェクトの共同編集者)を提供し、これらの依存関係の全体のライフサイクルを管理するために、DI(DI)です。
コンセプト:
1.依存オブジェクト:一部のコンポーネントに依存するオブジェクトを取得し、またはターゲットオブジェクトを呼び出す必要があります。
制御型反転:
1.依存性注入:優先
(1)コンストラクタ注入:コンストラクタに必要な依存関係を設定し、引数なしのコンストラクタです。依存関係が存在しない場合は、オブジェクトを作成することはできません。
たとえば、あなたはパラメータの型を指定することができ、コンストラクタが選ぶことができるかに注目してください。
(2)噴射セッター依存性:特殊セッターメソッドは、依存関係を設定して提供します。あなたは、時間の依存せずにオブジェクトを作成し、セッターメソッドを使用して依存関係を設定することができます。
@Autowiredは(コンストラクタを含む)プロセスに関する注釈は、コンテナが自動的にパラメータ名に応じて、パラメータ依存に設定されることができます。
(3)フィールド注入
@Autowried
プライベートインスピレーションinspirationBean、最も一般的な方法。
初期値パラメータを設定するため@valueアノテーション方法。
(4)メソッド・インジェクションを探します
動的依存性を求める、単一の実施形態は、引用された非シングルトンを解決することができます。動的プロキシの実装を使用してCGLIB。
原理:コアは、例えば、注釈方法で、<ルックアップ方法>又は@Lookupを使用することです。非単依存性の実施形態の範囲を変更する@Scope(「プロトタイプ」)を用いて第一、方法が提供され、その後、ターゲットBeanにNULLを返し、注釈は@Lookupを使用しています
だから、動的な依存関係を取得するように、スプリングを使用して、このメソッドを呼び出します。デフォルトのBeanコンテナの例は、シングルモードであることに注意してください。
(5)置換する方法を
ソースコードを変更せずに別の動的豆のいずれかに記載の方法。動的プロキシの実装を使用してCGLIB。
原理:コアが使用<交換法名=代替=「あるいはビーン」「名前が別の方法である」>代替クラスインターフェースMethodReplacerを実装し、そして豆として登録されています。
指示:
。他のコンポーネントは、コンストラクタ・インジェクションを使用する前にコンポーネントが作成された場合に作成され、他の一般的な使用セッター注入しなければなりません。
B.コンポーネントおよび構成の差異は、この数は、典型的な構成をインターフェースするが、依存性を提供していません。
パブリックインターフェースNewsletterSender(){
無効setSmtpServer(文字列SMTPSERVER)。
ストリングgetSmtpServer()。
無効setFromAddress(文字列FROMADDRESS)。
ストリングgetFromAddress()。
空センド();
}
上記構成では、ビジネスロジックを変更する一般的なインターフェイスに、最後の方法を提供するように構成されたフロントインターフェイスは、インターフェイスを定義することができる4つです。しかし、サブクラス宣言セットに、特定のコンポーネント・インタフェースを入れないでください。
コンポーネントと設定の違い:
(1)構成パラメータは、通常、他の関数によって呼び出され、受動的です。
(2)情報は、典型的には、構成パラメータではなく、構成要素であります
(3)簡単な構成パラメータが通常値または単純な値に設定されています。
親コンポーネントが作成されることなく、依存関係を変更することができる注入c.setter
2.検索をによって:
(1)依存性のプル:豆JNDIレジストリプルから取り、Beanコンテナは、レジストリでレジストリから取得時間依存性のルックアップを登録されています。
(2)文脈依存ルックアップ:直接容器からではなく、レジストリから。電流成分を得るための特定の方法があり、特定のインタフェースを達成するためのコンポーネント。
2:春アプリケーション
1.依存性注入コアたBeanFactoryインタフェース、Beanコンポーネント。BeadFacotry管理Beanのライフサイクル全体。
2.アプリケーションがたBeanFactoryのインスタンスを作成する必要があり(一般的に使用されるのApplicationContext、BeanDefinitionReader構成からBeanの構成情報を取得するためにインターフェースを実装する必要がされている)インタフェースを実装し、豆の構成と依存関係を使用するBeanによって設定された情報は、(インターフェースBeanDefinitionを実装します例は、構成ビーンビーン自体、それは、豆に依存し、典型的には、異なる負荷に対応するクラス)にXMLまたはプロパティとして、外部に情報を構成しない情報のみが格納されている、を示しています。
例:
(1)
DefaultListableBeanFactory工場=新しいDefaultListableBeanFactory(); //创建たBeanFactory
XmlBeanDefinitionReadder RDR = XmlBeanDefinitionReader(工場); //クラスをロードするためのBean構成を作成
rdr.loanBeanDefinitions(新しいClassPathResource( '春/ XML-ビーン工場-config.xmlの')); //豆ローディング構成。
(2)GenericXmlApplicationContext CTX =新しいGenericXmlApplicationContext()。
ctx.load( '春/ XML-ビーン工場-config.xmlの'); //上記第二の工程と比べ省略する。
3. Java設定
このようMyBatisのなどのサードパーティのライブラリを、適用する場合、多くの場合、固定豆の多くを作成する必要がある場合、これらは一般的に、このJavaを設定するために使用することができ、変更されません。
@Configuration構成クラス注釈、及びスプリングIoCコンテナインスタンス化Beanによって直接呼び出さ@Bean方法を含む注釈を使用します。Bean名と、それを作成するために使用されるメソッドの名前は同じです。
Configurationクラスは、Beanを使用する必要があります
ApplicationContextのCTX =新しいAnnotationConfigApplicationContext(HelloWorldConfiguration.class)。
他の方法がある豆の構成を得る:@ComponentScanを(basePackages = { "com.apress.prospring5.ch3.annotation"})@ImportResource(位置= { "クラスパス:春/ APP-コンテキストxml.xml"})。
4. SPELを使用することにより、春はどんな春の管理Beanのプロパティにアクセスすることができますし、
@value(「bean.property位{}」)
5.ApplicationContext、すなわち複数の容器を宣言することができ、そして親子関係が提供され、入れ子にすることができます。そして、お互いのコンテナBeanを使用することができます。
Autowired @ 6.オブジェクトがコレクション型の場合は、春には、そのタイプのすべてのオブジェクトにしようと、現在のApplicationContextが来るに注入され、予想外の依存関係が注入される可能性があります。次のBeanへの変更がない場合、それは例外がスローされます。
正しい方法:
(1)@Resource(名= "マップ")
(2)@Autowired
@Qualifier( "マップ")
上記は、他の依存関係を注入することを避けるために、注入されたBean名をクリアするには、2つの方法があります。
7.豆スコープ
(1)スコープシングルトン
(2)プロトタイプスコープ
(3)リクエストスコープ:各HTTP Beanの要求をインスタンス化します
(4)セッションスコープ:各HTTPセッションにBeanをインスタンス化する(複数の要求があってもよいです)
(5)グローバルセッションスコープ:ポートレットは、すべてのアプリケーション間で共有します。
(6)スコープスレッド:Beanのインスタンス当たりのスレッド
(7)カスタムスコープ:インタフェースはorg.springframwork.beans.factory.config.Scope実施します
8.beanに配置された依存順序
それは他のBeanを使用するようにBeanを反映していないが、あなたはコード内で呼び出す必要があれば、春は呼び出すことはできませんBeanを引き起こす可能性の構成、中に知覚されることはありません。この使用注釈@DependsOn(「Bean名」)については、
自動組立モード
(1)BYNAMEモード:注入の名前
(2)byTypeモード:注射のタイプ
(3)モードコンストラクタ:同じ機能を有するbyType、すべてのそのコンストラクタが実行される代わりにセッター注入を除いては、種類に応じ。そして、ほとんどの引数のコンストラクタに一致します。
(4)デフォルトモード:コンストラクタとbyTypeモード間の自動選択。
説明:
(1)豆自動組立は、それ以外の場合はorg.springframework.beans.factory.NoSuchBeanDefinitionException例外を報告し、一意であることが保証されなければなりません。
(2)Beanが特定のBeanを指定する@Qualifier(「Bean名」)を使用することができる同じタイプが複数ある場合。通常、このコメントは@Autowiredを追いました。
コアの問題:
循環依存関係を解決する方法1.。
主要なプロセス: