豆の範囲でIOCのコンテナ管理のBean春

IOCのコンテナ管理ビーン
Bean名およびインスタンス化方法
命名Beanの

開発者が提供しない場合、少なくとも1人の名前を割り当てる必要があり作成されたコンテナオブジェクト(春コンテナの後ろにまとめ)IOC各スプリングをスプリングコンテナが割り当てられます内部名は、ビーンの名前で、我々は以前の場合のように、名前はビーンが実際のオブジェクトを取得し、対応することにより、操作を実行され、クラスの他のクラスに見つけ、それを使用することができます。構成XMLベースでは、あなたが豆割り当て名にid属性を使用することができ、同じXML構成ファイルで、IDは一意である必要がありますが、異なるXMLは同じにすることができ、もちろん、あなたも名ASSIGNあなたは豆を与える名前を使用することができます、name属性は、あなたがBeanの複数を割り当て、id属性をそのまま使用することはできません与えられた別の名前にスペース、カンマ、セミコロンを使用することができ、複数の名前を割り当てることができます。

<! - Name属性複数名- > 
<Bean名= "AccountDao、accountDao2"クラス= "com.zejian.spring.springIoc.dao.impl.AccountDaoImpl" /> 
<! -コンフィギュレーション固有のID属性名ではなく、同じ名前- > 
<豆ID =「accountDaoId」クラス=「com.zejian.spring.springIoc.dao.impl.AccountDaoImpl」/> 

 

最初の名前に加えて、name属性に二つの名前を宣言しています他の名前はエイリアス(aliase)と呼ばれています。:Bean名を定義するだけでなく、豆にエイリアス<エイリアス>タグの使用に加えて

、<豆ID =「accountDaoId」
<! -指定された別名が指定された別名Name属性の指定は、別名与えられた豆を与える- >
<エイリアス名=「accountDaoId」別名 =「accountDao3」/> 

 

明らかにBeanオブジェクト、我々が設定したい場合はすでに存在している、と豆のいくつかに特別な名前を与えたい、別名、この時点では非常に便利です。上記のステートメントを使用してBeanオブジェクトは、オブジェクトが豆を掛けた後、豆は面倒起こる管理することができ、手動でXMLのように宣言文は、Javaアノテーションに基づいてSpring構成を提供するために、以下のものがorg.springframework.stereotypeを使用しました.Service(@Service)とorg.springframework.stereotype.Repository(@Repository)の文AccountServiceImplとAccountDaoImplクラス、使用@Autowired注釈注入accountDao(XML宣言の脚注ドライブ)

//コンポーネントと同じ効果@ 
@Service 
実装AccountServiceImplパブリッククラス{AccountServiceの
  @Autowired 
  プライベートAccountDao AccountDao; 
} 

 

// @同一の構成要素としての効果
@Repository 
パブリッククラスAccountDaoImpl実装AccountDao { 
// ... 
}

注釈文では、我々はより多くの2宣言のxml豆よりも必要ありませんが、明らかに春の豆がそれらのパッケージに注釈を付け伝える必要がありますが、あなたは、あなたが春のコンテキスト・ネームスペースを有効にする必要があり、パケット走査機構を追加する必要があります。
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <!-- 声明包扫描 --> <context:component-scan base-package="com.zejian.spring.springIoc" /> </beans>

XML宣言Beanの効果前と同様に、上記のステートメント。ここでは、コンポーネントと@Service @意味、あなたは効果@Component @Serviceと@Repositoryを達成するために注釈を使用できることを理解する必要が異なってませんでしたが、@Serviceはまた、唯一のビジネスクラスへのクラスを理解するために私たちをことができます。@Repositoryも春とチェーンに関連するデータにアクセスするために他の機能を有効にすることができたよう(これの意味は再び滞留春のJDBC関連のコンテンツであり、この時私達はちょうど@Componentに@Repository同等を理解する必要がある一方で、データアクセス層を表し、名前が提供されていない場合)、あなたはまた、@ Componentに文字列値の名前を入力することができ、サービスと@Repository @、デフォルトでは、単純なクラス名(最初の文字の小文字)はビーン名となっています。

@Service("accountService")
public class AccountServiceImpl implements AccountService { @Autowired private AccountDao accountDao; } @Repository("accountDao") public class AccountDaoImpl implements AccountDao{ //...... }

 

だから我々も知っている。このため、Springフレームワークは、コントローラ@、サービス実装クラスのタグ付けのためのサービス@ 3つの@Component注釈ノートの同等、@リポジトリのDAO実装クラスタギングを提供し、コントローラの実装(ウェブ層コントローラ)をタグ付けするためのクラス、および2つの方法でのJava BeanとアノテーションタグのXML宣言を使用して構成豆Springコンテナオブジェクト、我々はまた、単独で、または2対1の混合物を使用することができるの理解彼らのニーズに応じて、使用します。

 


 豆書き換えメカニズム

 

別のxmlファイル、理解するための一例で、同じシンプルなルックを表示され、同じ名前の豆id属性を読み込むときビーン書き換えメカニズムは、主に、優先課題として、とても神秘的ではありません。-春:2つのスプリングプロファイルと同時に負荷それらを定義ioc.xml

 <ビーンズのxmlns = "http://www.springframework.org/schema/beans" 
  のxmlns:XSI =「http://www.w3.orgを/ 2001 / XMLスキーマ・インスタンス" 
  のxmlns:コンテキスト =" http://www.springframework.org/schema/context " 
  のxsi:schemaLocationの = "
 HTTP:// www.springframework.org/schema/beans HTTP:// WWW。 springframework.org/schema/beans/spring-beans.xsd 
HTTP:// www.springframework.org/schema/context 
HTTP:// www.springframework.org/schema/context/spring-context.xsd 
「> 
<! - - > -デフォルトコンストラクタが作成され、プロパティの値プロパティに注入されます
<豆ID = "アカウント"= "com.zejian.spring.springIoc.pojo.Account"> 
    <プロパティ名= "名前"の値= /> "私はSpringIOC1だ" 
    <プロパティ名= "PWD"値= "123" /> 
</豆> 
< /豆> 

 
 - ioc2.xml

 <豆のxmlns = "http://www.springframework.org/schema/beans" 
  のxmlns:XSI = "http://www.w3.org/2001/XMLSchema-instance" 
  のxmlns:コンテキスト = "http://www.springframework.org/schema/context" 
  のxsi:schemaLocationの = "
のhttp:// www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring -beans.xsd 
ます。http:// www.springframework.org/schema/context 
のhttp:// www.springframework.org/schema/context/spring-context.xsd 
「> 
<! -デフォルトコンストラクタを作成し、プロパティの値プロパティに注入される- > 
<豆上記のid上記=」アカウント「クラス =」COMを。 zejian.spring.springIoc.pojo.Account "> 
    <プロパティ名="名前"値=" I AM SpringIOC2 "/> 
    <プロパティ名=" PWD "値=" 123「/> 
</ビーン> 
</豆>

豆と通話をゲット

@Test
public void test1() { ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring/spring-ioc.xml","spring/spring-ioc2.xml"); Account account= (Account) applicationContext.getBean("account"); System.out.println("调用结果:"+account.getName()); }

 

 

異なるIDのXML設定ファイル内どうやら同じ名前とBeanオブジェクトの同じタイプを宣言し、春のコンテナはつまり、最後にはアカウントに追加デフォルトのスプリングioc2.xmlによってロードされますが、アカウント内のスプリングioc.xmlを無視されます、豆は、機構原理を書き換えることは、あなたがかつてのをカバーする豆の名前を宣言するときと同じであると述べました。また、この場合にはspringApplication.xmlに属する階層構成ファイル、Webアプリケーションの開発プロセス、通常階層構成管理では、それがマスターspringApplication.xmlによって重合されたときに、ことを明確にする必要がありますサブフォルダ、優先度の出会いで、このような関係を一般的にサブフォルダ高いこの状況、子ファイルがロードさそう豆。サブファイルのスプリングioc2.xml春-ioc.xmlマスターファイルで紹介したように:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <!-- 默认构造创建,并通过property 注入属性值 --> <bean id="account" class="com.zejian.spring.springIoc.pojo.Account" > <property name="name" value="I am SpringIOC1" /> <property name="pwd" value="123" /> </bean> <!-- 导入的子文件 --> <import resource="spring-ioc2.xml" /> </beans>

 

コードを実行します。

@Test
  public void test1() { ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring/spring-ioc.xml"); Account account= (Account) applicationContext.getBean("account"); System.out.println("调用结果:"+account.getName()); }

 

コードは、第一バネioc2.xmlバネioc.xmlアカウントをロードし、前のコードと同じ効果がアカウントを無視します。

 

 

 

豆の範囲で春

 BeanインスタンススプリングIOCコンテナを作成する場合、例えば(スコープシングルトン(シングルトン)、プロトタイプ(原型パターン)、要求(HTTPリクエスト)、セッション(セッション)、グローバル・セッションなど、グローバルスコープビーンを指定しますセッション)。

 

 ビーンは、負荷を長期化

 

 

いくつかのケースでは、我々は不要なメモリ消費を避けるために、遅延段を作成するために豆を使用したい場合があり、春にも自主的に初期化遅延Beanをサポートしています。このようなAのコンテナを作成するために必要なときに実際に春まで作成したBeanが遅れることになる、設定ファイルで遅延ロードにBeanを定義することが可能です。通常の状況下では、別のBeanにBean参照から作成された、または豆の豆を見つけるために表示されたことをトリガ設定プロパティは、そうBeanインスタンスを作成し、起動時にロードされ、それらを拡張するために設定されている場合でも、遅延の作成Springコンテナであれば、当然のことながら、これらの豆は、初期化が非遅延に注入し、シングルトンBeanのスコープを作成することができる遅延させることができます。xmlファイル内のBean怠惰-INIT属性を使用する一方、configure豆全体のxmlファイルに必要がある場合は、してください。なお、怠惰-INIT属性のオーバーライドdefualt-怠惰defualt-怠惰-INIT属性を使用して遅延ロードをしている、遅延ロードするかどうかBeanを変更するように構成することができます-initプロパティ。

 

<豆のxmlns = "http://www.springframework.org/schema/beans" 
       のxmlns:XSI = "http://www.w3.org/2001/XMLSchema-instance" 
       のxmlns:コンテキスト = "のhttp:// WWW .springframework.org /スキーマ/コンテキスト" 
       のxsi:schemaLocationの = "
         のhttp:// www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
        ます。http:// www.springframework.org/schema/context 
        ます。http:// www.springframework.org/schema/context/spring-context.xsd 
        "デフォルト・怠惰-INIT =" 真の "> 
    <! - デフォルト -lazy-INIT ="すべての遅延読み込みで真の「XML豆 - >
    <! -レイジー-INIT = " false"と非拡張ロードを表します。 - > 
    <Bean名= "AccountDao"怠惰-INIT =は"falseに" クラス = "com.zejian.spring.springIoc.dao.impl.AccountDaoImpl" / > 
    <! -宣言AccountServiceのオブジェクト、春を作成する- > 
    <Bean名= "AccountServiceの" クラス = "com.zejian.spring.springIoc.service.impl.AccountServiceImpl"> 
          <! - accountDaoオブジェクトを注入し、あなたが必要ですメソッド集合- > 
          <プロパティ名= "AccountDao" REF = "AccountDao" /> 
    </ビーン> 
</豆>
          

 

Springコンテナが開始段階豆にデフォルトで作成され、プロセスと呼ばれる前のBeanの初期化は、これは良いですが、早くもこのような構成ファイル、またはいくつかの豆などの構成エラーが発生する可能タイプミスは、まだ定義されていないように見つけることができますこれは、注入されたというようにされました。もちろん、初期化する豆のニーズの多くはスロースタート春のコンテナを引き起こす可能性がある、そこにあるように、特定のBeanは単にいくつかの機会を必要とするかもしれないが、春の立ち上げ段階でコンテナを作成する必要はありませんでした、これは豆のMyBatisのか、休止状態のSessionFactoryのSessionFactoryなどもあり遅れ負荷それらはSpringコンテナは、より多くの不要なメモリ消費量を削減、緩和され始めます。

<コンテキスト:コンポーネント・スキャン/>与<文脈:アノテーション設定/>

我々値が組み立て@リソース@ Autowired @上記で使用し、自動注釈<文脈:アノテーション設定/>のような場合、アノテーション駆動型レジスタ、ように注釈効果。実際に、そのような<文脈:アノテーション設定/>構成、それは、4つのBeanPostProcessor SpringコンテナにAutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、をPersistenceAnnotationBeanPostProcessorとRequiredAnnotationBeanPostProcessorレジスタ式の役割です。4個のレジスタBeanPostProcessor Springコンテナが対応する注釈付きを識別することができた後、もちろん、それらは個別に設定することができます。 
[リソース@使用したい場合は、@ PostConstruct、@ PreDestroyおよび他の注釈はCommonAnnotationBeanPostProcessor個別に宣言することができ 
ますが、@PersistenceContext注釈を使用したい場合は声明をPersistenceAnnotationBeanPostProcessor、豆。 
あなたが@Required注釈を使用する場合は、ビーンのRequiredAnnotationBeanPostProcessorを宣言する必要があります。 
一般的には、これらのノートはどこにでもあり、あなたはいつも自然に非常に面倒なの設定が必要な場合は、春のコンテナ非常に知的な配達の<context:アノテーションのconfig />ので、私たちの簡略化された構成のため、自動的に宣言しました。 
<コンテキスト:コンポーネント・スキャン/>の場合は、サービス@使用して、フロント、コンポーネント@、@コントローラー、@リポジトリ他の注釈は、XML設定ファイルは、パケットスキャンドライバの<context:コンポーネントスキャン/>を宣言して必要な、その役割があります我々は大幅にプログラミングコードを簡素化する1つの宣言Bean構成、ずつを行うことができないので、Springコンテナの起動時には、パッケージに対応する注釈駆動型Beanオブジェクトをスキャンし、それらのインスタンスを作成するために開始します。すでに<コンテキストが含まれています。<コンポーネントスキャン/コンテキスト>:ので、引退することができます。<::コンポーネント・スキャン/コンテキスト>の後に、<注釈-config設定/コンテキスト>ときSpring XML構成ファイルという注意注釈-config />機能の。登録とアノテーション駆動型スキャン機能パッケージ:ほとんどの場合、<コンポーネントスキャン/コンテキスト>として使用されています。

 

おすすめ

転載: www.cnblogs.com/hellohero55/p/12649993.html