一. @Configuration 配置
告诉Spring容器这是一个配置类 ==xml配置
二. @ComponentScan 包扫描
说明:
//value:指定要扫描的包 //按照规则指定需要关闭默认规则,设置 useDefaultFilters=false; //excludeFilters = Filter[] :指定扫描的时候按照什么规则排除那些组件 //includeFilters = Filter[] :指定扫描的时候只需要包含哪些组件 //FilterType.ANNOTATION:按照注解 //FilterType.ASSIGNABLE_TYPE:按照给定的类型; //FilterType.ASPECTJ:使用ASPECTJ表达式 //FilterType.REGEX:使用正则指定 //FilterType.CUSTOM:使用自定义规则
使用例子在配置类上添加:
value = { "com.willow"}, ( includeFilters = { .Filter(type=FilterType.ANNOTATION,classes={ Controller.class}), //添加 RController 注解的组件 .Filter(type=FilterType.ASSIGNABLE_TYPE,classes={ persion.class}), //添加 类型为persion 注解的组件 Filter(type = FilterType.CUSTOM, classes = { MyTypeFilter.class}), . // 自定义注解的规则 Filter(type = FilterType.ANNOTATION,classes={ Repository.class,Controller.class}) . //添加 Repository和,Controller 注解的组件 }, useDefaultFilters = false //includeFilters 设置 useDefaultFilters=false; excludeFilters 设置 useDefaultFilters=true ) //包扫描
自定义规则扫描 MyTypeFilter:
package com.willow.config; import org.springframework.core.io.Resource; import org.springframework.core.type.AnnotationMetadata; import org.springframework.core.type.ClassMetadata; import org.springframework.core.type.classreading.MetadataReader; import org.springframework.core.type.classreading.MetadataReaderFactory; import org.springframework.core.type.filter.TypeFilter; import java.io.IOException; public class MyTypeFilter implements TypeFilter { /** * metadataReader:读取到的当前正在扫描的类的信息 * metadataReaderFactory:可以获取到其他任何类信息的 */ public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException { //获取当前类注解的信息 AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata(); //获取当前正在扫描的类的类信息 ClassMetadata classMetadata = metadataReader.getClassMetadata(); //获取当前类资源(类的路径) Resource resource = metadataReader.getResource(); String className = classMetadata.getClassName(); System.out.println("--->"+className); if(className.contains("er")){ //类名称包含“er”的 返回true,注册到IOC容器中 return true; } return false; //不注册 } }
三. @Conditional 注解
在类上添加:满足当前条件,这个类中配置的所有bean注册才能生效;