Spring-Component@Repository、@Service、@Controllerと@Component


もっと読む
回転:http://blog.csdn.net/ye1992/article/details/19971467
@Repository、@Service、@Controllerと@Componentは、類をビーンと表記します.
Springは2.0バージョンからSpringの開発を簡素化するための注釈を導入しています.Repository注釈は最初に導入されたもので、データアクセス層(DAO層)のクラスをSpring Bernとして識別するために用いられます.具体的には、この注釈をDAO類に表示すればいいです.また、Springがクラスパス中のクラスをスキャンして、@Repository注釈を識別できるようにするためには、XMLプロファイルにBenの自動スキャン機能を有効にする必要があります.以下の通りです
 //      @Repository   DAO      Bean 
 package bookstore.dao; 
 @Repository 
 public class UserDaoImpl implements UserDao{ …… } 

 //   ,  XML         Spring        
  
    ……
  
……
  
 
このように、XMLでの明示的な使用は、ビーンの構成を行う必要はありません.Springは、コンテナ初期化時に、base-packageで指定されたカバンとそのサブパッケージのすべてのクラスファイルを自動スキャンし、@Repositoryと表示されているすべての種類をSpring Beanとして登録します.
なぜ@RepositoryはDAO類にしか表記できないですか?これは、この注釈の役割は、単にクラスをビーンと識別するだけでなく、表示されたクラスから投げられたデータをSpringとして例外パッケージ化したデータにアクセスすることができるからである.Spring自体は豊富で具体的なデータアクセス技術とは無関係なデータアクセス異常構造を提供しており、異なる耐久層フレームをカプセル化するための例外的な構造であり、非常に下の層のフレームから独立している.
Spring 2.5@Repositoryに加えて、同様の機能を追加しました.@Component、@Service、@Controler、それぞれソフトウェアシステムの異なるレベルに使用されます.
  • @Componentは汎用的な概念であり、一つのコンポーネント(Bean)だけを表しており、どのようなレベルでも機能します.
  • @Serviceは通常業務層で機能しますが、現在は@Componentと同じ機能です.
  • @Constrollerは通常制御層に作用しますが、現在は@Componentと同じ機能です.
  • クラスで@Repository、@Component、@Serviceと@Controler注解を使うことによって、Springは自動的に対応するBeanDefinitionオブジェクトを作成して、Apple Conteetに登録します.これらの種類はSpringチューブのコンポーネントになります.これらの3つの注は、異なるソフトウェア層に作用するクラスを解除し、その使い方は@Repositoryと全く同じです.
    また、上の4つの注釈のほかに、ユーザーがカスタマイズした注釈を作成し、注釈に@Componentを表示することができます.このカスタム注釈は@Componentと同じ機能を持っています.しかし、この機能はあまり使われていません.
    ビーンが自動的に検出されると、そのスキャナーのビーンNameGenerator戦略に基づいてそのビーン名が生成される.デフォルトでは、name属性を含む@Component、@Repository、@Serviceと@Controllerに対して、nameの値をビームの名前にします.この注釈には、name値や他のカスタムフィルタで発見されたコンポーネントが含まれていない場合、デフォルトのBean名は、小文字の先頭の非限定クラス名となります.デフォルトのbean命名ポリシーを使いたくないなら、カスタムの命名ポリシーを提供できます.まずBenNameGeneratorインターフェースを実現し、デフォルトの無パラメータ構造法を含むことを確認します.次に、スキャナの配置時に全限定クラス名を提供します.
      
      
      
    
     
    XMLで構成されたSpring Beanと同様に、前記注釈によって識別されたBeanは、そのデフォルトのスコープは「singleton」であり、これらの4つの注釈に対応するために、Benを表示しながらBenの役割領域を指定することができ、Spring 2.5は@Scope注釈を導入している.この注釈を使う時は、スコープの名前を提供すればいいです.次のようになります.
     @Scope("prototype") 
     @Repository 
     public class Demo { … } 
    
     
    ドメイン解析戦略をカスタマイズしたいなら、注釈に基づく方法を使わずに、Scope MetadataResolaverインターフェースを実現するだけで、デフォルトのパラメータなしの構造方法を確認することができます.スキャナを配置する時に、全限定クラス名を提供します.