2021-3-9
1.IOC底层核心原理-组件扫描器
按注解排除
package com.wc.pro.config;
import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.*;
import org.springframework.stereotype.Service;
/**
* @author wc
* @Date: 2021/03/08/15:35
*/
@Configuration
//<context:component-scan base-package="com.wc"></context:component-scan>
@ComponentScan(value = "com.wc",
//排除过滤
excludeFilters = @ComponentScan.Filter(
//按照注解排除
type = FilterType.ANNOTATION,
classes = Service.class
))
//<!--加载properties配置信息-->
//<context:property-placeholder location="classpath*:jdbc.properties"/>
@Import(DateSourceConfiguration.class)
public class SpringConfigConfiguration {
}
自定义排除
package com.wc.pro.config.filter;
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;
/**
* @author wc
* @Date: 2021/03/09/15:39
*/
public class MyFilter implements TypeFilter {
public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
//false 默认所有的不过滤(通常为false)
//true 默认过滤所有的
//加一个判断等于什么类型的就不过滤
//metadataReader 原数据 拿class
ClassMetadata classMetadata = metadataReader.getClassMetadata();
//在拿到所有className
String className = classMetadata.getClassName();
System.out.println(className);
if (className.equals("com.wc.pro.service.impl.IUserServiceImpl")) {
return true;
}
return false;
}
}
2.IOC底层核心原理-自定义导入器
package com.wc.pro.config.selector;
import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;
/**
* @author wc
* @Date: 2021/03/09/16:00
*/
public class MyImportSelector implements ImportSelector {
public String[] selectImports(AnnotationMetadata annotationMetadata) {
return new String[]{"com.wc.pro.service.impl.IUserServiceImpl"};
}
}
3.IOC底层核心原理-自定义注册器
package com.wc.pro.config.registrar;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanNameGenerator;
import org.springframework.context.annotation.ClassPathBeanDefinitionScanner;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;
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;
/**
* @author wc
* @Date: 2021/03/09/16:03
*/
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
ClassPathBeanDefinitionScanner scanner=new ClassPathBeanDefinitionScanner(registry,false);
scanner.addExcludeFilter(new TypeFilter() {
public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
return true;
}
});
scanner.scan("com.wc");
}
}