最初の質問:ComponentScan注意事項については、それだけでJavaのカテゴリをスキャンしますが、多くの場合、実際の必要性は、指定されたクラスをスキャンすることです
@ComponentScan 二つのアイテム一basePackagesが配置され、他方がbasePackageClassesあります。
* BasePackagesのJavaパッケージをアレイ状に構成されていてもよい、Spring構成、それに対応するパッケージに基づいており、サブパケットをスキャンし、構成豆、組み立てられました。
* BasePackageClassesは、複数のクラスを構成することができ、スプリングベースの設定場所パッケージ及び対応するサブパケットのためのバッグ、豆走査アセンブリ。
CI @ComponentScan両者を検証するために、第一のインタフェースIStaffServiceを定義し、
パッケージ pro.jamal.blog.demo6.service。輸入 pro.jamal.blog.demo5.annotation.Staff。/ ** * @author:lyj * @Date:2019年6月8日 * / パブリック・インタフェース IStaffService { 公共空 printStaffInfo(スタッフスタッフ)。 }
春のクラスが推奨されるいくつかの操作を記述するためのインターフェイスを使用して、彼はそうより柔軟、定義し、相分離を達成することができます。ここIStaffService実装クラスを追加します。
パッケージ pro.jamal.blog.demo6.service.impl。輸入 org.springframework.stereotype.Component。 輸入 pro.jamal.blog.demo5.annotation.Staff。/ ** * @author:lyj * @Date:2019年6月8日 * / @Component パブリッククラス StaffServiceImplは実装 IStaffService { @Override 公共のボイド printStaffInfo(スタッフスタッフ){ System.out.printlnは( " [ID = " +スタッフ.getId()+ " ] "); System.out.println( " [名= "+ staff.getName()+" ] "); System.out.printlnは(」 [給与= "+ staff.getSalary()+" ]「); } }
本明細書でそれ@Compentビーン春が必要、及び対応する方法IStaffService printStaffInfo定義されたインタフェースを達成することを示しています。
2豆StaffServiceとスタッフを組み立てるには、対応する設定を追加する必要が@ComponentScan、
パッケージ pro.jamal.blog.demo6; インポート org.springframework.context.annotation.ComponentScan; インポート pro.jamal.blog.demo5.annotation.Staff; インポート pro.jamal.blog.demo6.service.impl.StaffServiceImpl; / * * * @author:LYJ * @date:2019年6月8日 * / //ここ2つのパッケージをスキャンして、そのサブ// @ ComponentScan(basePackages = { " pro.jamal.blog.demo5.annotation"、 " pro.jamal.blog.demo6「})// 2つのスキャンクラスパッケージ及びそのサブ @ComponentScan(basePackageClasses = {スタッフ。クラス、StaffServiceImpl。クラス }) パブリッククラス ApplicationConfig { }
* @ComponentScanパケットを複数の対応を定義しますが、それぞれが@ ComponentScanを設定し、春には新しいオブジェクトクラスを生成しますするためには、Beanの複数のインスタンスを生成します処方され、定義されている場合、これは多くの場合ではありません我々は、必要があります。
*定義されたためbasePackagesとbasePackageClasses ComponentScanさん@、春は特別な区別がされます、それもその存在を定義し、同じカスタムパッケージまたはサブパッケージを繰り返す場合、同じ@ComponentScanに言うことです、それは何回も同じ豆を引き起こすことはありません複数のオブジェクトを生成する構成で得られた、スキャン。パッケージと重複するオブジェクトを生成します子パッケージの繰り返しが存在しなければならないので、そのため、複数の@ComponentScanノートを設定することを推奨していない、これは私たちが必要とするものではありません。basePackagesとbasePackageClassesの選択には、basePackageの可読性が良いだろう、そうプロジェクトがそれを使用する優先順位を与えるだろうが、復興事業の大多数で、basePackagesを使用しないようにしよう、非常に頻繁に再構築されているため、パッケージ名を変更これは、繰り返しの設定を必要とし、IDEは、あなたにヒントを与えることはありません。basePackagesClassesの使用、パッケージを移動すると、IDEがエラーを要求されますし、簡単にこれらのエラーを処理することができます。
テスト
パッケージ pro.jamal.blog.demo6。輸入 org.springframework.context.ApplicationContext; 輸入 org.springframework.context.annotation.AnnotationConfigApplicationContext; 輸入 pro.jamal.blog.demo5.annotation.Staff。 輸入 pro.jamal.blog.demo6.service.impl.StaffServiceImpl。/ ** * @author:lyj * @Date:2019年6月8日 * / パブリッククラスクライアント{ 公共静的ボイドメイン(文字列[]引数){ ApplicationContextのコンテキスト= 新しい AnnotationConfigApplicationContext(ApplicationConfig クラス)。 スタッフスタッフ= context.getBean(スタッフ。クラス); StaffServiceImpl staffService = context.getBean(StaffServiceImpl。クラス)。 staffService.printStaffInfo(スタッフ)。 } }