Springコンポーネントスキャン使用詳細

5080 ワード

1.xmlファイルにbeanを配置したくないなら、私達はクラスにspringコンポーネントの注釈を加えることができます.springのスキャナーを再構成するだけで、beanの自動ロードができます.
2.次はスプリングフレーム開発マニュアルの一節を引用します.

Spring 2.5は、より多くの典型的な注釈を導入しています.  @Componentを選択します@Service和  @Controller. @ComponentSpringで管理されているすべてのコンポーネントの一般的な形式です.@Repositoryを選択します@Service和  @Controllerはい、そうです@Componentの詳細化は、より具体的な用例(例えば、耐久層、サービス層、表現層にそれぞれ対応)を表すために用いられます.@Componentあなたのコンポーネントクラスに注解します.@Repositoryを選択します@Service または@Controllerこれらの注释によって、あなたのクラスはよりよくツールによって処理されたり、切断面と関連したりするかもしれません.例えば、これらの典型的な注釈は理想的な切り込みポイントターゲットになります.もちろん、Spring Frame ewark以降のバージョンでは、  @Repositoryを選択します@Service和  @Controllerもっと意味があるかもしれません.そうすると、サービス層の中で使うべきものだと考えています.@Componentまだです@Serviceはい、そうです@Service明らかにより良い選択です.同じように、前に述べたように、  @Repository恒久化層において異常変換が可能になった場合には、マークとして使用されます.」
3.
もう一つのラベルは根本的に削除できます.すでに含まれています.
4.
二つのサブラベルを提供します.各代表が導入し、排除するフィルタリングです.
例えば:
5.
filterラベルはSpring 3に5つのタイプがあります.以下の通りです.
Filter Type
Examples Expression
Description
アンノテーション
org.example.SomeAnnotation
SomeAnnotionに該当するtaget class
assignable
org.example.SomeClass
クラスまたはインターフェースのフルネームを指定します.
aspectj
org.example.*Service+
AsppectJ文法
レゲックス
org\.example\.Default.*
Regelar Expression
custom
org.example.MyType Filter
Spring 3新規予約Type、実作org.springframe ewark.type.Type Filter
1. 
その役割は陰的に向かっている. Spring 容器の登録 - AutowiredAnnotationBeanPostProcessor、-Common AnnotationBeanPostProcessor、-Persistence AnnotationBeanPostProcessor、-RequiredAnnotationBeanPostProcessorの4つのBeanPostProcessor.その役割は、プログラムで注を使いたいなら、その注解に対応するクラスを先に登録しなければなりません.下の図のように:
依存のクラス
注釈
Common AnnotationBenPostProcessor
@Resource 、@PostConstruct、@Predestry
Persistence AnnotationBenPostProcessorのBean
@Persistence Contect
AutowiredAnnotationBenPostProcessor Bean
@Autowired
RequiredAnnotationBeanPostProcessor
@Required
もちろん自分で登録することもできます.
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor "/>  
<bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/> 


2. 
設定項目は、注釈駆動ビーンの定義を実行するためにクラスバッグをスキャンする機能を有効にするだけでなく、注釈駆動自動注入の機能を有効にしています.つまり、内部にAutowiredAnnotationBeanPostProcessorとCommon AnnotationBeanPostProcessorを陰的に登録しています.
ここで面白い問題があります.スキャンは二つの配置ファイルに全部配置する必要があるかどうかです.このようないくつかのテストをしました.
            
(1)appication Contact.xmlにのみ以下のように配置されています.
    <context:component-scan base-package="com.login" />
起動は正常ですが、何の要求も阻止されません.簡単に言えば@Controllerが失効します.
(2)上記構成は、spring-servlet.xmlのみに設定します.
起動は正常で、要求も正常ですが、物事が失効して、つまりロールバックできません.
(3)上記の情報は、appication Contact.xmlとspring-servlet.xmlの両方に配置されています.
正常に起動し、正常に要求しても、物事が無効になり、ロールバックできません.
(4)appication Contact.xmlには、以下のように配置されています.
    <context:component-scan base-package="com.login" />
spring-servlet.xmlには以下のように配置されています.
    <context:component-scan base-package="com.sohu.login.web" />
この時正常に起動し、正常に要求し、物事も正常になった.
結論:spring-servlet.xmlでは、@Controllerの注釈が付いているすべての種類をスキャンするだけで、他の注釈が付いているすべての種類をappication Controllerでスキャンすることができます.
3. 
Default AnnotationHandlerMappingは自動的に登録されます. AnnotationMethodhandler Adapterと
http://www.blogjava.net/crazycy/archive/2014/07/12/415738.html