package com.common.configure; import com.common.core.utils.KitClassUtils; import lombok.Data; import org.springframework.beans.factory.config.BeanDefinitionHolder; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.context.annotation.ClassPathBeanDefinitionScanner; import org.springframework.core.env.Environment; import org.springframework.core.io.ResourceLoader; import org.springframework.core.type.filter.AnnotationTypeFilter; import org.springframework.lang.Nullable; import java.lang.annotation.Annotation; import java.util.Arrays; import java.util.Set; /** * @author 廖振钦 */ @Data public class ClassPathTableScanner extends ClassPathBeanDefinitionScanner { private Class annotationClass; public ClassPathTableScanner(BeanDefinitionRegistry registry) { super(registry); } public ClassPathTableScanner(BeanDefinitionRegistry registry, boolean useDefaultFilters) { super(registry, useDefaultFilters); } public ClassPathTableScanner(BeanDefinitionRegistry registry, boolean useDefaultFilters, Environment environment) { super(registry, useDefaultFilters, environment); } public ClassPathTableScanner(BeanDefinitionRegistry registry, boolean useDefaultFilters, Environment environment, @Nullable ResourceLoader resourceLoader) { super(registry, useDefaultFilters, environment, resourceLoader); } public void registerFilters() { if (this.annotationClass != null) { addIncludeFilter(new AnnotationTypeFilter(this.annotationClass)); } } @Override public Set doScan(String... basePackages) { Set beanDefinitions = super.doScan(basePackages); beanDefinitions.forEach(beanDefinition->{ String beanclassname = beanDefinition.getBeanDefinition().getBeanClassName(); try { Class onwClass = Class.forName(beanclassname); KitClassUtils.tableclass.add(onwClass); }catch (Exception e){ e.printStackTrace(); } }); if (beanDefinitions.isEmpty()) { logger.warn("没有找到 '" + Arrays.toString(basePackages) + "'包,请检查你的配置."); } return beanDefinitions; } }