名称:@ComponentScan
类型:类注解
位置:类定义上方
作用:设置spring配置加载类扫描规则
范例:
@ComponentScan(
value="com.itheima", //设置基础扫描路径
excludeFilters = //设置过滤规则,当前为排除过滤
@ComponentScan.Filter( //设置过滤器
type= FilterType.ANNOTATION, //设置过滤方式为按照注解进行过滤
classes=Repository.class) //设置具体的过滤项,过滤所有@Repository修饰的bean
)
includeFilters:设置包含性过滤器
excludeFilters:设置排除性过滤器
type:设置过滤器类型
名称: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.NanMu.dao.impl.BookDaoImpl")){
return false;
}
return false;
}
}
组件扫描加载过滤器
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 {
}
不写衍生注解就可以配置一个导入器类用于对象中
名称: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");
}
}
@Configuration
@ComponentScan("com.itheima")
//4.自定义注册器
//@Import(MyImportBeanDefinitionRegistrar.class)
public class SpringConfig {
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nBE7sUTy-1665675069211)(C:\Users\紫轩蝶泪\AppData\Roaming\Typora\typora-user-images\image-20220827102518026.png)]
FactoryBean与BeanFactory区别