5)コア原則の基礎となるIoC
5.1)IoCコアインターフェース
5.2)コンポーネントスキャナー
- 開発プロセスでは、要件に応じて必要なBeanをロードする必要があり、指定されたBeanは除外されます
5.3)コンポーネントスキャンローディングフィルターを設定する
-
名前:@ComponentScan
-
タイプ:クラスアノテーション
-
場所:クラス定義の上
-
役割:Spring構成のロードクラスのスキャンルールを設定します
-
例:
@ComponentScan( value="com.itheima", //设置基础扫描路径 excludeFilters = //设置过滤规则,当前为排除过滤 @ComponentScan.Filter( //设置过滤器 type= FilterType.ANNOTATION, //设置过滤方式为按照注解进行过滤 classes=Repository.class) //设置具体的过滤项,过滤所有@Repository修饰的bean )
includeFilters:包含フィルターを設定します
excludeFilters:除外フィルターを設定します
type:フィルタータイプを設定します
5.4)カスタムコンポーネントフィルター
-
名前:TypeFilter
-
タイプ:インターフェース
-
役割:カスタムタイプフィルター
-
例:
public class MyTypeFilter implements TypeFilter { public boolean match(MetadataReader mr, MetadataReaderFactory mrf) throws IOException { ClassMetadata cm = metadataReader.getClassMetadata(); tring className = cm.getClassName(); if(className.equals("com.itheima.dao.impl.BookDaoImpl")){ return false; } return false; } }
5.5)カスタムインポーター
- Beanは、構成によってのみスプリングコンテナーに入ることができ、スプリングによってロードおよび制御されます。
- Beanを構成する方法は次のとおりです。
- XMLファイルでタグ構成を使用する
- @Componentと派生アノテーション構成を使用する
- エンタープライズ開発のプロセスでは、通常、多数のBeanを構成する必要があり、多数のBeanを迅速かつ効率的に構成する方法が必要です。
ImportSelector
-
名前:ImportSelector
-
タイプ:インターフェース
-
役割:カスタムBeanインポーター
-
例:
public class MyImportSelector implements ImportSelector { public String[] selectImports(AnnotationMetadata icm) { return new String[]{ "com.itheima.dao.impl.AccountDaoImpl"}; } }
@Configuration @ComponentScan("com.itheima") @Import(MyImportSelector.class) public class SpringConfig { }
5.6)カスタムレジストラ
-
名前:ImportBeanDefinitionRegistrar
-
タイプ:インターフェース
-
役割:カスタムBean定義レジストラ
-
例:
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { public void registerBeanDefinitions(AnnotationMetadata icm, BeanDefinitionRegistry r) { ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(r, false); TypeFilter tf = new TypeFilter() { public boolean match(MetadataReader mr, MetadataReaderFactory mrf) throws IOException { return true; } }; scanner.addIncludeFilter(tf); //scanner.addExcludeFilter(tf); scanner.scan("com.itheima"); } }
5.7)Bean初期化プロセスの分析
5.8)Bean初期化プロセスの分析
- BeanFactoryPostProcessor
- ロール:Beanファクトリオブジェクトの作成後にBeanオブジェクトが作成される前に実行されるアクションを定義し、ファクトリで作成後のビジネス処理を実行するために使用されます
- 実行時:現在の操作はファクトリの処理に使用され、1回だけ実行されます
- BeanPostProcessor
- 機能:すべてのBeanの初期化の前後に実行される統合アクションを定義します。これらのアクションは、Beanで作成前のビジネス処理と作成後のビジネス処理を実行するために使用されます。
- ランタイム:現在の操作には各Beanの作成プロセスが伴い、Beanが作成されるたびに操作が実行されます。
- InitializingBean
- 役割:各Beanの初期化の前に実行されるアクションを定義します。これは不均一なアクションであり、作成前にBeanでビジネス処理を実行するために使用されます。
- ランタイム:現在の操作には、パーソナライズされたビジネス処理を保証するためのBeanの作成プロセスが伴います。
- 注:上記の操作を実行するには、スプリングコンテナによってロードする必要があります
5.9)Bean初期化プロセスの分析
5.10)面倒なBean初期化プロセスの処理
- FactoryBean
- 単一のBeanの初期化プロセスをカプセル化して、構成を簡素化する目的を達成します
FactoryBeanとBeanFactoryの違い
- FactoryBean:単一のBeanの作成プロセスをカプセル化します
- BeanFactory:Bean関連の取得操作を定義するSpringコンテナのトップレベルのインターフェース