下面列出了怎么用org.springframework.core.type.filter.AbstractTypeHierarchyTraversingFilter的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
String declaringClass = metadata.getClass().getName();
ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(registry, false, this.environment, this.resourceLoader);
scanner.addIncludeFilter(new AnnotationTypeFilter(Command.class));
scanner.addIncludeFilter(new AnnotationTypeFilter(Event.class));
AnnotationAttributes enodeScan = attributesFor(metadata, EnableEnode.class.getName());
Set<String> basePackages = new LinkedHashSet<>();
String[] basePackagesArray = enodeScan.getStringArray("basePackages");
for (String pkg : basePackagesArray) {
String[] tokenized = StringUtils.tokenizeToStringArray(this.environment.resolvePlaceholders(pkg),
ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS);
Collections.addAll(basePackages, tokenized);
}
for (Class<?> clazz : enodeScan.getClassArray("basePackageClasses")) {
basePackages.add(ClassUtils.getPackageName(clazz));
}
if (basePackages.isEmpty()) {
basePackages.add(ClassUtils.getPackageName(metadata.getClassName()));
}
scanner.addExcludeFilter(new AbstractTypeHierarchyTraversingFilter(false, false) {
@Override
protected boolean matchClassName(String className) {
return declaringClass.equals(className);
}
});
String[] scanPackages = StringUtils.toStringArray(basePackages);
ObjectContainer.BASE_PACKAGES = scanPackages;
scanner.scan(scanPackages);
}