Skip to content

Commit 79faf93

Browse files
committed
add annotation
1 parent 02c958a commit 79faf93

File tree

12 files changed

+527
-19
lines changed

12 files changed

+527
-19
lines changed

07rpc/rpc01/rpcfx-core/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@
2424
<version>1.2.70</version>
2525
</dependency>
2626

27+
<dependency>
28+
<groupId>org.projectlombok</groupId>
29+
<artifactId>lombok</artifactId>
30+
<version>1.18.16</version>
31+
</dependency>
32+
2733
<dependency>
2834
<groupId>com.squareup.okhttp3</groupId>
2935
<artifactId>okhttp</artifactId>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.kimmking.rpcfx.demo.provider;
1+
package io.kimmking.rpcfx.api;
22

33
public class ServiceProviderDesc {
44

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package io.kimmking.rpcfx.api.annotation;
2+
3+
import org.springframework.beans.factory.config.BeanDefinition;
4+
import org.springframework.beans.factory.config.BeanDefinitionHolder;
5+
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
6+
import org.springframework.context.annotation.ClassPathBeanDefinitionScanner;
7+
import org.springframework.core.env.Environment;
8+
import org.springframework.core.io.ResourceLoader;
9+
10+
import java.util.Set;
11+
12+
import static org.springframework.context.annotation.AnnotationConfigUtils.registerAnnotationConfigProcessors;
13+
14+
public class RpcfxClassPathBeanDefinitionScanner extends ClassPathBeanDefinitionScanner {
15+
16+
17+
public RpcfxClassPathBeanDefinitionScanner(BeanDefinitionRegistry registry, boolean useDefaultFilters, Environment environment,
18+
ResourceLoader resourceLoader) {
19+
20+
super(registry, useDefaultFilters);
21+
22+
setEnvironment(environment);
23+
24+
setResourceLoader(resourceLoader);
25+
26+
registerAnnotationConfigProcessors(registry);
27+
28+
}
29+
30+
public RpcfxClassPathBeanDefinitionScanner(BeanDefinitionRegistry registry, Environment environment,
31+
ResourceLoader resourceLoader) {
32+
33+
this(registry, false, environment, resourceLoader);
34+
35+
}
36+
37+
@Override
38+
public Set<BeanDefinitionHolder> doScan(String... basePackages) {
39+
return super.doScan(basePackages);
40+
}
41+
42+
@Override
43+
public boolean checkCandidate(String beanName, BeanDefinition beanDefinition) throws IllegalStateException {
44+
return super.checkCandidate(beanName, beanDefinition);
45+
}
46+
47+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package io.kimmking.rpcfx.api.annotation;
2+
3+
import org.springframework.context.annotation.Import;
4+
5+
import java.lang.annotation.*;
6+
7+
@Target(ElementType.TYPE)
8+
@Retention(RetentionPolicy.RUNTIME)
9+
@Documented
10+
@Import(RpcfxComponentScanRegistrar.class)
11+
public @interface RpcfxComponentScan {
12+
13+
/**
14+
* Alias for the {@link #basePackages()} attribute. Allows for more concise annotation
15+
* declarations e.g.: {@code @DubboComponentScan("org.my.pkg")} instead of
16+
* {@code @DubboComponentScan(basePackages="org.my.pkg")}.
17+
*
18+
* @return the base packages to scan
19+
*/
20+
String[] value() default {};
21+
22+
/**
23+
* Base packages to scan for annotated @Service classes. {@link #value()} is an
24+
* alias for (and mutually exclusive with) this attribute.
25+
* <p>
26+
* Use {@link #basePackageClasses()} for a type-safe alternative to String-based
27+
* package names.
28+
*
29+
* @return the base packages to scan
30+
*/
31+
String[] basePackages() default {};
32+
33+
/**
34+
* Type-safe alternative to {@link #basePackages()} for specifying the packages to
35+
* scan for annotated @Service classes. The package of each class specified will be
36+
* scanned.
37+
*
38+
* @return classes from the base packages to scan
39+
*/
40+
Class<?>[] basePackageClasses() default {};
41+
42+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package io.kimmking.rpcfx.api.annotation;
2+
3+
import org.springframework.beans.factory.config.BeanDefinition;
4+
import org.springframework.beans.factory.support.AbstractBeanDefinition;
5+
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
6+
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
7+
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
8+
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
9+
import org.springframework.core.annotation.AnnotationAttributes;
10+
import org.springframework.core.type.AnnotationMetadata;
11+
import org.springframework.util.ClassUtils;
12+
13+
import java.util.Arrays;
14+
import java.util.Collections;
15+
import java.util.LinkedHashSet;
16+
import java.util.Set;
17+
18+
import static org.springframework.beans.factory.support.BeanDefinitionBuilder.rootBeanDefinition;
19+
20+
public class RpcfxComponentScanRegistrar implements ImportBeanDefinitionRegistrar {
21+
22+
@Override
23+
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
24+
25+
Set<String> packagesToScan = getPackagesToScan(importingClassMetadata);
26+
27+
registerServiceAnnotationBeanPostProcessor(packagesToScan, registry);
28+
29+
//registerCommonBeans(registry);
30+
}
31+
32+
private void registerServiceAnnotationBeanPostProcessor(Set<String> packagesToScan, BeanDefinitionRegistry registry) {
33+
34+
BeanDefinitionBuilder builder = rootBeanDefinition(ServiceAnnotationBeanPostProcessor.class);
35+
builder.addConstructorArgValue(packagesToScan);
36+
builder.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
37+
AbstractBeanDefinition beanDefinition = builder.getBeanDefinition();
38+
BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, registry);
39+
40+
}
41+
42+
private Set<String> getPackagesToScan(AnnotationMetadata metadata) {
43+
AnnotationAttributes attributes = AnnotationAttributes.fromMap(
44+
metadata.getAnnotationAttributes(RpcfxComponentScan.class.getName()));
45+
String[] basePackages = attributes.getStringArray("basePackages");
46+
Class<?>[] basePackageClasses = attributes.getClassArray("basePackageClasses");
47+
String[] value = attributes.getStringArray("value");
48+
// Appends value array attributes
49+
Set<String> packagesToScan = new LinkedHashSet<String>(Arrays.asList(value));
50+
packagesToScan.addAll(Arrays.asList(basePackages));
51+
for (Class<?> basePackageClass : basePackageClasses) {
52+
packagesToScan.add(ClassUtils.getPackageName(basePackageClass));
53+
}
54+
if (packagesToScan.isEmpty()) {
55+
return Collections.singleton(ClassUtils.getPackageName(metadata.getClassName()));
56+
}
57+
return packagesToScan;
58+
}
59+
60+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package io.kimmking.rpcfx.api.annotation;
2+
3+
import io.kimmking.rpcfx.api.Filter;
4+
5+
import java.lang.annotation.*;
6+
7+
@Documented
8+
@Retention(RetentionPolicy.RUNTIME)
9+
@Target({ElementType.TYPE})
10+
@Inherited
11+
public @interface RpcfxService {
12+
13+
/**
14+
* Interface class name, default value is empty string
15+
*/
16+
String interfaceName() default "";
17+
18+
/**
19+
* Service version, default value is empty string
20+
*/
21+
String version() default "";
22+
23+
/**
24+
* Service group, default value is empty string
25+
*/
26+
String group() default "";
27+
28+
/**
29+
* Service mock name, use interface name + Mock if not set
30+
*/
31+
String mock() default "";
32+
33+
/**
34+
* Timeout value for service invocation, default value is 0
35+
*/
36+
37+
int timeout() default 0;
38+
39+
/**
40+
* Filters for service invocation
41+
*
42+
* @see Filter
43+
*/
44+
String[] filter() default {};
45+
46+
/**
47+
* Service owner name
48+
*/
49+
String owner() default "";
50+
51+
/**
52+
* Application spring bean name
53+
*/
54+
String application() default "";
55+
56+
/**
57+
* Module spring bean name
58+
*/
59+
String module() default "";
60+
61+
/**
62+
* Service tag name
63+
*/
64+
String tag() default "";
65+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package io.kimmking.rpcfx.api.annotation;
2+
3+
public class ServiceAnnotationBeanPostProcessor {
4+
}

0 commit comments

Comments
 (0)