I.はじめに
前の私たちは、シンプルな春のプロジェクトを構築し、簡単なコンポーネントの登録を使用しました。この一つは、私たちは詳細に、注射の構成を説明します。
第二に、コンポーネントインジェクション
1. @ComponentScan
前回の記事では、我々は@Configurationと@Bean注入を達成するためのコンポーネントを使用しています。例多くの要素を注入する必要がある場合でも、各コンポーネントは、非常に面倒になり@Beanノート、を介して注入する必要があります。だから、春は@ComponentScanコメントを提供します。
@ComponentScanパッケージは、コンポーネントの注釈コンポーネントは春の容器に注入によって示されている@、これらのパッケージには、指定することができ、スキャンする必要があります。
コントローラ@、サービス@、@リポジトリこれらのノートは、@Component注釈機能が含まれている、注意してください。
@Controller パブリック クラスPersonController { }
@Service パブリック クラスPersonService { }
@Repository パブリック クラスPersonDao { }
@ComponentScan(basePackages = "indi.zqc" ) @Configuration パブリック クラスMainConfig { @Bean(名 = "人" ) 公衆{人の人物() 戻り 新しい人数( "张三"、13 ); } }
パブリック クラスMainConfigTest { @Test 公共 ボイド試験(){ ApplicationContextのApplicationContextの = 新しい AnnotationConfigApplicationContext(MainConfig。クラス)。 // 获取容器中的所有ビーン描述 のString [] beanDefinitionNames = applicationContext.getBeanDefinitionNames()。 用(文字列名:beanDefinitionNames){ System.out.printlnは(名前)。 } } }
2.カスタムのtypeFilter
使用@ComponentScanの注釈では、パッケージがマークされ@Component Springコンテナに注入されているすべてのコンポーネントをスキャンします。しかし、時には、私たちは、1つまたはいくつかのコンポーネントを注入する必要はありません、あなたはおそらく@Componentを取り除くしたいと思ううまく指摘しています。あなたは、サードパーティ製のパッケージパッケージを注入する場合でも、このようなシナリオでは、あなたは、コード、サードパーティ製のパッケージを変更することはできません。@ComponentScan注釈は、コンポーネントを除外することができexcludeFiltersプロパティを持っています。以下は、PersonControllerは除外しました。
@ComponentScan(basePackages = "indi.zqc" 、 excludeFiltersは = { ComponentScan.Filter(タイプ@ = FilterType.ASSIGNABLE_TYPE、クラス= PersonController。クラス) }) @Configuration パブリック クラスMainConfig { @Bean(名 = "人" ) 公共人人(){ 返す 新しい人( "张三"、13 ); } }
いくつかの種類があります@ ComponentScan.Filter
- 注釈、注釈型フィッティングパラメータは、クラスを指定照合することによってFilterType.ANNOTATION
- FilterType.ASSIGNABLE_TYPEクラスを照合することによって、指定されたクラスのパラメータの型を持つクラス
- 式AspectJの型マッチングによってFilterType.ASPECTJ、フィッティングパラメータは、発現パターンを指定します
- パラメータを指定して、クラス名にマッチする正規表現でFilterType.REGEX発現パターンを指定します
- FilterType.CUSTOMカスタムは、複雑なクラスパラメータはクラスを指定し、クラスがカスタムインタフェースを実装する必要がorg.springframework.core.type.filter.TypeFilter
成分が除外属性excludeFiltersによって指定することができる、もちろん、指定されたコンポーネントのincludeFiltersを介して導入されてもよいです。
userDefaultFilters = falseを閉じ@CompenentScanデフォルトの機能により、私たち最初のノート。アセンブリは、その後、指定されたプロパティincludeFiltersを介して導入されます。
@ComponentScan(basePackages = "indi.zqc" 、 includeFilters = { @ ComponentScan.Filter(タイプ = FilterType.ASSIGNABLE_TYPE、クラス= PersonController。クラス) }、 useDefaultFilters = 偽) @Configuration パブリック クラスMainConfig { @Bean(名 =「人" ) 公共人の人物(){ 戻り 、新たな人物("张三」、13 ); } }