Skip to content

Commit 6732987

Browse files
committed
标记注解
1 parent 481ca36 commit 6732987

File tree

3 files changed

+39
-0
lines changed

3 files changed

+39
-0
lines changed

src/main/java/com/github/yungyu16/spring/stub/StubBeanDefinitionRegistrar.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.github.yungyu16.spring.stub;
22

3+
import com.github.yungyu16.spring.stub.annotation.ProxyStub;
34
import com.github.yungyu16.spring.stub.annotation.ProxyStubScan;
45
import com.github.yungyu16.spring.stub.support.ClassPathStubBeanDefinitionScanner;
6+
import lombok.SneakyThrows;
57
import lombok.extern.slf4j.Slf4j;
68
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
79
import org.springframework.context.EnvironmentAware;
@@ -10,9 +12,11 @@
1012
import org.springframework.core.annotation.AnnotationAttributes;
1113
import org.springframework.core.env.Environment;
1214
import org.springframework.core.type.AnnotationMetadata;
15+
import org.springframework.core.type.filter.AnnotationTypeFilter;
1316
import org.springframework.util.ClassUtils;
1417
import org.springframework.util.StringUtils;
1518

19+
import java.lang.annotation.Annotation;
1620
import java.util.ArrayList;
1721
import java.util.Arrays;
1822
import 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
}

src/main/java/com/github/yungyu16/spring/stub/annotation/ProxyStubScan.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
@Retention(RetentionPolicy.RUNTIME)
1515
@Documented
1616
@Import(StubBeanDefinitionRegistrar.class)
17+
//TODO 支持重复注解
18+
//@Repeatable(ProxyStubScans.class)
1719
public @interface ProxyStubScan {
1820
@AliasFor("basePackages")
1921
String[] value() default {};
@@ -22,4 +24,11 @@
2224
String[] basePackages() default {};
2325

2426
Class<?>[] basePackageClasses() default {};
27+
28+
/**
29+
* 标记注解
30+
*
31+
* @return
32+
*/
33+
Class<? extends Annotation> markAnnotation() default Annotation.class;
2534
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.github.yungyu16.spring.stub.annotation;
2+
3+
import com.github.yungyu16.spring.stub.StubBeanDefinitionRegistrar;
4+
import org.springframework.context.annotation.Import;
5+
6+
import java.lang.annotation.*;
7+
8+
/**
9+
* CreatedDate: 2020/11/24
10+
* Author: songjialin
11+
*/
12+
@Target(ElementType.TYPE)
13+
@Retention(RetentionPolicy.RUNTIME)
14+
@Documented
15+
public @interface ProxyStubScans {
16+
ProxyStubScan[] value() default {};
17+
}

0 commit comments

Comments
 (0)