11package com .github .yungyu16 .spring .stub ;
22
3+ import com .github .yungyu16 .spring .stub .annotation .ProxyStub ;
34import com .github .yungyu16 .spring .stub .annotation .ProxyStubScan ;
45import com .github .yungyu16 .spring .stub .support .ClassPathStubBeanDefinitionScanner ;
6+ import lombok .SneakyThrows ;
57import lombok .extern .slf4j .Slf4j ;
68import org .springframework .beans .factory .support .BeanDefinitionRegistry ;
79import org .springframework .context .EnvironmentAware ;
1012import org .springframework .core .annotation .AnnotationAttributes ;
1113import org .springframework .core .env .Environment ;
1214import org .springframework .core .type .AnnotationMetadata ;
15+ import org .springframework .core .type .filter .AnnotationTypeFilter ;
1316import org .springframework .util .ClassUtils ;
1417import org .springframework .util .StringUtils ;
1518
19+ import java .lang .annotation .Annotation ;
1620import java .util .ArrayList ;
1721import java .util .Arrays ;
1822import java .util .Map ;
@@ -26,6 +30,7 @@ public class StubBeanDefinitionRegistrar implements ImportBeanDefinitionRegistra
2630
2731 private Environment environment ;
2832
33+ @ SneakyThrows
2934 @ Override
3035 public void registerBeanDefinitions (AnnotationMetadata importingClassMetadata , BeanDefinitionRegistry registry ) {
3136 Map <String , Object > annotationAttributes = importingClassMetadata .getAnnotationAttributes (ProxyStubScan .class .getName (), true );
@@ -46,6 +51,14 @@ public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, B
4651 pkgList .add (ClassUtils .getPackageName (importingClassMetadata .getClassName ()));
4752 }
4853 ClassPathBeanDefinitionScanner scanner = new ClassPathStubBeanDefinitionScanner (registry , environment );
54+ String markAnnotation = attrs .getString ("markAnnotation" );
55+ if (!StringUtils .isEmpty (markAnnotation )) {
56+ scanner .resetFilters (false );
57+ AnnotationTypeFilter proxyStubFilter = new AnnotationTypeFilter (ProxyStub .class , true , false );
58+ @ SuppressWarnings ("unchecked" )
59+ AnnotationTypeFilter markAnnotationFilter = new AnnotationTypeFilter ((Class <? extends Annotation >) ClassUtils .forName (markAnnotation , null ), true , false );
60+ scanner .addIncludeFilter ((metadataReader , metadataReaderFactory ) -> proxyStubFilter .match (metadataReader , metadataReaderFactory ) && markAnnotationFilter .match (metadataReader , metadataReaderFactory ));
61+ }
4962 int bdCnt = scanner .scan (StringUtils .toStringArray (pkgList ));
5063 log .debug ("本轮从{}中扫描到{}个SpringStub" , pkgList , bdCnt );
5164 }
0 commit comments