1616 */
1717package io .github .xinfra .lab .rpc .spring .bean ;
1818
19+ import io .github .xinfra .lab .rpc .config .ExporterConfig ;
1920import io .github .xinfra .lab .rpc .spring .annotation .XRpcService ;
2021import java .util .Collection ;
2122import java .util .Set ;
2526import org .springframework .beans .factory .BeanClassLoaderAware ;
2627import org .springframework .beans .factory .config .BeanDefinitionHolder ;
2728import org .springframework .beans .factory .config .ConfigurableListableBeanFactory ;
28- import org .springframework .beans .factory .support .AbstractBeanDefinition ;
2929import org .springframework .beans .factory .support .BeanDefinitionBuilder ;
3030import org .springframework .beans .factory .support .BeanDefinitionReaderUtils ;
3131import org .springframework .beans .factory .support .BeanDefinitionRegistry ;
@@ -106,14 +106,12 @@ private void scanXRpcServiceBeans(BeanDefinitionRegistry registry) {
106106 .flatMap (Collection ::stream )
107107 .collect (Collectors .toSet ());
108108 for (BeanDefinitionHolder beanDefinitionHolder : beanDefinitionHolders ) {
109- registerExporterConfigBeans (registry , beanDefinitionHolder );
109+ registerXRpcServiceBean (registry , beanDefinitionHolder );
110110 }
111111 }
112112
113- private void registerExporterConfigBeans (
113+ private void registerXRpcServiceBean (
114114 BeanDefinitionRegistry registry , BeanDefinitionHolder rpcServiceBeanDefinitionHolder ) {
115- BeanDefinitionBuilder builder =
116- BeanDefinitionBuilder .rootBeanDefinition (ExporterConfigBean .class );
117115 // get service interface
118116 Class <?> beanClass =
119117 ClassUtils .resolveClassName (
@@ -123,12 +121,25 @@ private void registerExporterConfigBeans(
123121 log .warn ("No interfaces found for class: {}" , beanClass );
124122 throw new IllegalArgumentException ("No interfaces found for class: " + beanClass );
125123 }
126- builder .addConstructorArgValue (allInterfaces [0 ]);
127- builder .addPropertyReference ("providerBoostrap" , "providerBoostrap" );
128- builder .addPropertyReference ("serviceImpl" , rpcServiceBeanDefinitionHolder .getBeanName ());
124+ Class <?> serviceInterface = allInterfaces [0 ];
125+
126+ BeanDefinitionBuilder xRpcServiceBeanBuilder =
127+ BeanDefinitionBuilder .rootBeanDefinition (XRpcServiceBean .class );
128+ xRpcServiceBeanBuilder .addPropertyReference ("providerBoostrap" , "providerBoostrap" );
129+
129130 // todo resolve @XRpcService attrs
131+ BeanDefinitionBuilder exporterConfigBuilder =
132+ BeanDefinitionBuilder .rootBeanDefinition (ExporterConfig .class );
133+ exporterConfigBuilder .addConstructorArgValue (serviceInterface );
134+ exporterConfigBuilder .addPropertyReference (
135+ "serviceImpl" , rpcServiceBeanDefinitionHolder .getBeanName ());
136+ String exporterConfigBeanName =
137+ BeanDefinitionReaderUtils .registerWithGeneratedName (
138+ exporterConfigBuilder .getBeanDefinition (), registry );
139+
140+ xRpcServiceBeanBuilder .addPropertyReference ("exporterConfig" , exporterConfigBeanName );
130141
131- AbstractBeanDefinition beanDefinition = builder . getBeanDefinition ();
132- BeanDefinitionReaderUtils . registerWithGeneratedName ( beanDefinition , registry );
142+ BeanDefinitionReaderUtils . registerWithGeneratedName (
143+ xRpcServiceBeanBuilder . getBeanDefinition () , registry );
133144 }
134145}
0 commit comments