通常spring扫描bean只需要配置包名即可,如果工程需要拆分应用分别部署,可以细化扫描的规则即可达到效果。
自带的filter包括:annotaion、assignable、aspectj、regex 或者根据特性的扫描需求实现TypeFilter接口接口
自带的TypeFilter:
- annotation 类似于@Component、@Service,根据所加的注解确定是否管理Class。AnnotationTypeFilter
- assignable 直接指定的类全名称,包括子类和接口实现类。AssignableTypeFilter
- aspectj、regex 各自语法、表达式匹配的类。通配用
TypeFilter工作清单:
- ClassPathScanningCandidateComponentProvider 提供了基于base-package扫描的实现,find candidates 就是 filter match 工作的过程。
- 上述Provider 初始化过程会注册默认的filter 和指定的filter。
- 注册默认的filter包括:AnnotationTypeFilter(Component.class),并且尝试兼容ManagedBean、Named
- spring scan 的实现类ClassPathBeanDefinitionScanner,继承ClassPathScanningCandidateComponentProvider,实现容器的scan。
- RegexPatternTypeFilter 通过Pattern.matcher实现。
- AspectJTypeFilter 通过World、org.aspectj.weaver.patterns.TypePattern实现
tips:
- 通用模块化设计,细节看设计,好框架啊!