3
3
import io .github .lvyahui8 .spring .aggregate .config .RuntimeSettings ;
4
4
import io .github .lvyahui8 .spring .aggregate .facade .DataBeanAggregateQueryFacade ;
5
5
import io .github .lvyahui8 .spring .aggregate .facade .impl .DataBeanAggregateQueryFacadeImpl ;
6
+ import io .github .lvyahui8 .spring .aggregate .interceptor .AggregateQueryInterceptorChain ;
7
+ import io .github .lvyahui8 .spring .aggregate .interceptor .impl .AggregateQueryInterceptorChainImpl ;
6
8
import io .github .lvyahui8 .spring .aggregate .model .DataProvideDefinition ;
7
9
import io .github .lvyahui8 .spring .aggregate .repository .DataProviderRepository ;
8
10
import io .github .lvyahui8 .spring .aggregate .repository .impl .DataProviderRepositoryImpl ;
15
17
import org .reflections .scanners .MethodAnnotationsScanner ;
16
18
import org .springframework .beans .BeansException ;
17
19
import org .springframework .beans .factory .annotation .Autowired ;
20
+ import org .springframework .beans .factory .annotation .Qualifier ;
18
21
import org .springframework .boot .autoconfigure .condition .ConditionalOnMissingBean ;
19
22
import org .springframework .boot .context .properties .EnableConfigurationProperties ;
20
23
import org .springframework .context .ApplicationContext ;
@@ -54,22 +57,52 @@ public void setApplicationContext(ApplicationContext applicationContext) throws
54
57
55
58
@ Bean
56
59
@ ConditionalOnMissingBean
57
- public DataBeanAggregateQueryFacade dataBeanAggregateQueryFacade () {
58
- return new DataBeanAggregateQueryFacadeImpl (dataBeanAggregateQueryService ());
60
+ public DataBeanAggregateQueryFacade dataBeanAggregateQueryFacade (
61
+ @ Qualifier ("dataProviderRepository" ) DataProviderRepository dataProviderRepository ) {
62
+ return new DataBeanAggregateQueryFacadeImpl (dataBeanAggregateQueryService (dataProviderRepository ));
59
63
}
60
64
61
65
@ Bean
62
66
@ ConditionalOnMissingBean
63
- public DataBeanAggregateQueryService dataBeanAggregateQueryService () {
64
- DataProviderRepository repository = new DataProviderRepositoryImpl ();
65
- scanProviders (repository );
66
- DataBeanAggregateQueryServiceImpl service = new DataBeanAggregateQueryServiceImpl (repository );
67
- service .setRuntimeSettings (createRuntimeSettings ());
67
+ public DataBeanAggregateQueryService dataBeanAggregateQueryService (
68
+ @ Qualifier ("dataProviderRepository" ) DataProviderRepository dataProviderRepository ) {
69
+ if (properties .getBasePackages () != null ) {
70
+ for (String basePackage : properties .getBasePackages ()) {
71
+ Reflections reflections = new Reflections (basePackage , new MethodAnnotationsScanner ());
72
+ Set <Method > providerMethods = reflections .getMethodsAnnotatedWith (DataProvider .class );
73
+ for (Method method : providerMethods ) {
74
+ DataProvider beanProvider = AnnotationUtils .findAnnotation (method , DataProvider .class );
75
+ @ SuppressWarnings ("ConstantConditions" )
76
+ String dataId = beanProvider .id ();
77
+ Assert .isTrue (Modifier .isPublic (method .getModifiers ()),"data provider method must be public" );
78
+ Assert .isTrue (! StringUtils .isEmpty (dataId ),"data id must be not null!" );
79
+ DataProvideDefinition provider = DefinitionUtils .getProvideDefinition (method );
80
+ provider .setId (dataId );
81
+ provider .setIdempotent (beanProvider .idempotent ());
82
+ provider .setTimeout (beanProvider .timeout () > 0 ? beanProvider .timeout () : properties .getDefaultTimeout ());
83
+ dataProviderRepository .put (provider );
84
+ }
85
+ }
86
+ }
87
+ DataBeanAggregateQueryServiceImpl service = new DataBeanAggregateQueryServiceImpl ();
88
+ RuntimeSettings runtimeSettings = new RuntimeSettings ();
89
+ runtimeSettings .setEnableLogging (properties .getEnableLogging () != null
90
+ ? properties .getEnableLogging () : false );
91
+ runtimeSettings .setIgnoreException (properties .isIgnoreException ());
92
+ runtimeSettings .setTimeout (properties .getDefaultTimeout ());
93
+ service .setRepository (dataProviderRepository );
94
+ service .setRuntimeSettings (runtimeSettings );
68
95
service .setExecutorService (aggregateExecutorService ());
96
+ service .setInterceptorChain (aggregateQueryInterceptorChain ());
69
97
service .setApplicationContext (applicationContext );
70
98
return service ;
71
99
}
72
100
101
+ /**
102
+ * 允许用户自定义线程池
103
+ *
104
+ * @return
105
+ */
73
106
@ Bean (name = "aggregateExecutorService" )
74
107
@ ConditionalOnMissingBean (name = "aggregateExecutorService" )
75
108
public ExecutorService aggregateExecutorService () {
@@ -81,39 +114,21 @@ public ExecutorService aggregateExecutorService() {
81
114
new CustomizableThreadFactory (properties .getThreadPrefix ()));
82
115
}
83
116
84
- private void scanProviders (DataProviderRepository repository ) {
85
- if (properties .getBasePackages () != null ) {
86
- for (String basePackage : properties .getBasePackages ()) {
87
- Reflections reflections = new Reflections (basePackage , new MethodAnnotationsScanner ());
88
- Set <Method > providerMethods = reflections .getMethodsAnnotatedWith (DataProvider .class );
89
- for (Method method : providerMethods ) {
90
- dealProviderMethod (repository , method );
91
- }
92
- }
93
- }
94
- }
95
-
96
- private void dealProviderMethod (DataProviderRepository repository , Method method ) {
97
- DataProvider beanProvider = AnnotationUtils .findAnnotation (method , DataProvider .class );
98
- @ SuppressWarnings ("ConstantConditions" )
99
- String dataId = beanProvider .id ();
100
- Assert .isTrue (Modifier .isPublic (method .getModifiers ()),"data provider method must be public" );
101
- Assert .isTrue (! StringUtils .isEmpty (dataId ),"data id must be not null!" );
102
- DataProvideDefinition provider = DefinitionUtils .getProvideDefinition (method );
103
- provider .setId (dataId );
104
- provider .setIdempotent (beanProvider .idempotent ());
105
- provider .setTimeout (beanProvider .timeout () > 0 ? beanProvider .timeout () : properties .getDefaultTimeout ());
106
- repository .put (dataId ,provider );
117
+ /**
118
+ * 允许用户自定义provider存储
119
+ *
120
+ * @return
121
+ */
122
+ @ Bean (name = "dataProviderRepository" )
123
+ @ ConditionalOnMissingBean (DataProviderRepository .class )
124
+ public DataProviderRepository dataProviderRepository () {
125
+ return new DataProviderRepositoryImpl ();
107
126
}
108
127
109
128
110
- private RuntimeSettings createRuntimeSettings () {
111
- RuntimeSettings runtimeSettings = new RuntimeSettings ();
112
- runtimeSettings .setEnableLogging (properties .getEnableLogging () != null
113
- ? properties .getEnableLogging () : false );
114
- runtimeSettings .setIgnoreException (properties .isIgnoreException ());
115
- runtimeSettings .setTimeout (properties .getDefaultTimeout ());
116
- return runtimeSettings ;
129
+ @ Bean (name = "aggregateQueryInterceptorChain" )
130
+ @ ConditionalOnMissingBean (AggregateQueryInterceptorChain .class )
131
+ public AggregateQueryInterceptorChain aggregateQueryInterceptorChain () {
132
+ return new AggregateQueryInterceptorChainImpl ();
117
133
}
118
-
119
134
}
0 commit comments