スプリング注釈駆動開発(II) - 注入アセンブリ

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 ); 
    } 

}

3. @Scope

4. @Lazy

5. @Conditional

第三に、リンク 

「春の注釈駆動開発(A) - 建設するプロジェクト」

「春注釈駆動開発(B) - コンポーネント注入」

おすすめ

転載: www.cnblogs.com/zhuqianchang/p/11407642.html
おすすめ