ReferenceBean<T> referenceBean = new ReferenceBean<T>(reference); if ((reference.interfaceClass() == null || reference.interfaceClass() == void.class) && (reference.interfaceName() == null || "".equals(reference.interfaceName()))) { referenceBean.setInterface(field.getType()); referenceBean.setApplication(this.parseApplication(application, this.properties, environment, beanName, field.getName(), "application", application)); String module = reference.module(); referenceBean.setModule(this.parseModule(module, this.properties, environment, beanName, field.getName(), "module", module)); String[] registries = reference.registry(); referenceBean.setRegistries(this.parseRegistries(registries, this.properties, environment, beanName, field.getName(), "registry")); String monitor = reference.monitor(); referenceBean.setMonitor(this.parseMonitor(monitor, this.properties, environment, beanName, field.getName(), "monitor", monitor)); String consumer = reference.consumer(); referenceBean.setConsumer(this.parseConsumer(consumer, this.properties, environment, beanName, field.getName(), "consumer", consumer)); referenceBean.setApplicationContext(DubboConsumerAutoConfiguration.this.applicationContext); return referenceBean;
private Map<String, Map<String, Object>> buildReferencesMetadata( Map<InjectionMetadata.InjectedElement, ReferenceBean<?>> injectedElementReferenceBeanMap) { Map<String, Map<String, Object>> referencesMetadata = new LinkedHashMap<>(); for (Map.Entry<InjectionMetadata.InjectedElement, ReferenceBean<?>> entry : injectedElementReferenceBeanMap.entrySet()) { InjectionMetadata.InjectedElement injectedElement = entry.getKey(); ReferenceBean<?> referenceBean = entry.getValue(); Map<String, Object> beanMetadata = resolveBeanMetadata(referenceBean); beanMetadata.put("invoker", resolveBeanMetadata(referenceBean.get())); referencesMetadata.put(String.valueOf(injectedElement.getMember()), beanMetadata); } return referencesMetadata; }
ReferenceBean<?> referenceBean = DubboConsumerAutoConfiguration.this.getConsumerBean(beanName, field, reference); Class<?> interfaceClass = referenceBean.getInterfaceClass(); String group = referenceBean.getGroup(); String version = referenceBean.getVersion(); ClassIdBean classIdBean = new ClassIdBean(interfaceClass, group, version); Object dubboReference = DubboConsumerAutoConfiguration.DUBBO_REFERENCES_MAP.get(classIdBean); if (dubboReference == null) { referenceBean.afterPropertiesSet(); dubboReference = referenceBean.getObject(); DubboConsumerAutoConfiguration.DUBBO_REFERENCES_MAP.put(classIdBean, dubboReference);
@Override @SuppressWarnings({"unchecked"}) public void afterPropertiesSet() throws Exception { if (getConsumer() == null) { Map<String, ConsumerConfig> consumerConfigMap = applicationContext == null ? null : BeanFactoryUtils.beansOfTypeIncludingAncestors(applicationContext, ConsumerConfig.class, false, false); if (consumerConfigMap != null && consumerConfigMap.size() > 0) { setConsumer(consumerConfig); if (getApplication() == null && (getConsumer() == null || getConsumer().getApplication() == null)) { Map<String, ApplicationConfig> applicationConfigMap = applicationContext == null ? null : BeanFactoryUtils.beansOfTypeIncludingAncestors(applicationContext, ApplicationConfig.class, false, false); if (applicationConfigMap != null && applicationConfigMap.size() > 0) { setApplication(applicationConfig); if (getModule() == null && (getConsumer() == null || getConsumer().getModule() == null)) { Map<String, ModuleConfig> moduleConfigMap = applicationContext == null ? null : BeanFactoryUtils.beansOfTypeIncludingAncestors(applicationContext, ModuleConfig.class, false, false); if (moduleConfigMap != null && moduleConfigMap.size() > 0) { setModule(moduleConfig); if ((getRegistries() == null || getRegistries().isEmpty()) && (getConsumer() == null || getConsumer().getRegistries() == null || getConsumer().getRegistries().isEmpty()) && (getApplication() == null || getApplication().getRegistries() == null || getApplication().getRegistries().isEmpty())) { Map<String, RegistryConfig> registryConfigMap = applicationContext == null ? null : BeanFactoryUtils.beansOfTypeIncludingAncestors(applicationContext, RegistryConfig.class, false, false); if (registryConfigMap != null && registryConfigMap.size() > 0) { if (getMonitor() == null
/** 获取Dubbo服务 */ public static Object refer(ApplicationContext applicationContext, String interfaceName) { String key = "/" + interfaceName + ":"; ReferenceBean<?> referenceConfig = referenceConfigs.get(key); if (referenceConfig == null) { referenceConfig = new ReferenceBean<Object>(); referenceConfig.setInterface(interfaceName); if (applicationContext != null) { referenceConfig.setApplicationContext(applicationContext); try { referenceConfig.afterPropertiesSet(); } catch (Exception e) { throw new IllegalStateException(e.getMessage(), e); } } referenceConfigs.putIfAbsent(key, referenceConfig); referenceConfig = referenceConfigs.get(key); } return referenceConfig.get(); } }
for (ReferenceBean referenceBean : referenceBeanMap.values()) { ConsumerBean consumerBean = new ConsumerBean(); Class interfaceClass = referenceBean.getInterfaceClass(); Map<String, List<String>> methodNames = new LinkedHashMap<>(); Method[] methods = interfaceClass.getMethods(); consumerBean.setGroup(referenceBean.getGroup()); consumerBean.setInterfaceName(referenceBean.getInterface()); consumerBean.setMethodNames(methodNames); consumerBean.setConnections(referenceBean.getConnections()); consumerBean.setActives(referenceBean.getActives()); consumerBean.setRetries(referenceBean.getRetries()); consumerBean.setVersion(referenceBean.getVersion()); consumerBean.setTimeout(referenceBean.getTimeout()); consumerBean.setLoadbalance(referenceBean.getLoadbalance()); subscribedInterfaceList.add(consumerBean);
@Override protected void postConfigureBean(Reference annotation, ReferenceBean bean) throws Exception { bean.setApplicationContext(applicationContext); configureInterface(annotation, bean); configureConsumerConfig(annotation, bean); bean.afterPropertiesSet(); }
@SuppressWarnings("rawtypes") public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { if (org.springframework.aop.framework.Advised.class.isInstance(bean)) { org.springframework.aop.framework.Advised advised = (org.springframework.aop.framework.Advised) bean; Class<?> targetClass = advised.getTargetClass(); Compensable compensable = targetClass.getAnnotation(Compensable.class); if (compensable == null) { return bean; } Field[] fields = targetClass.getDeclaredFields(); for (int i = 0; fields != null && i < fields.length; i++) { Field field = fields[i]; Reference reference = field.getAnnotation(Reference.class); if (reference == null) { continue; } ReferenceBean referenceConfig = new ReferenceBean(reference); this.validateReferenceBean(beanName, referenceConfig); } } return bean; }
@Override public Class<?> getObjectType() { return getInterfaceClass(); }
private void configureInterface(Reference reference, ReferenceBean referenceBean) { Class<?> interfaceClass = reference.interfaceClass(); if (void.class.equals(interfaceClass)) { interfaceClass = null; String interfaceClassName = reference.interfaceName(); if (StringUtils.hasText(interfaceClassName)) { if (ClassUtils.isPresent(interfaceClassName, classLoader)) { interfaceClass = ClassUtils.resolveClassName(interfaceClassName, classLoader); } } } if (interfaceClass == null) { interfaceClass = this.interfaceClass; } Assert.isTrue(interfaceClass.isInterface(), "The class of field or method that was annotated @Reference is not an interface!"); referenceBean.setInterface(interfaceClass); }
private void configureConsumerConfig(Reference reference, ReferenceBean<?> referenceBean) { String consumerBeanName = reference.consumer(); ConsumerConfig consumerConfig = getOptionalBean(applicationContext, consumerBeanName, ConsumerConfig.class); referenceBean.setConsumer(consumerConfig); }
@Override public <T> T target(Target<T> target) { ReferenceBeanBuilder beanBuilder = ReferenceBeanBuilder .create(defaultReference, target.getClass().getClassLoader(), applicationContext) .interfaceClass(target.type()); try { T object = (T) beanBuilder.build().getObject(); return object; } catch (Exception e) { throw new RuntimeException(e); } } }
@SuppressWarnings({ "unchecked"}) public void afterPropertiesSet() throws Exception { if (getConsumer() == null) { Map<String, ConsumerConfig> consumerConfigMap = applicationContext == null ? null : BeanFactoryUtils.beansOfTypeIncludingAncestors(applicationContext, ConsumerConfig.class, false, false); if (consumerConfigMap != null && consumerConfigMap.size() > 0) { setConsumer(consumerConfig); if (getApplication() == null && (getConsumer() == null || getConsumer().getApplication() == null)) { Map<String, ApplicationConfig> applicationConfigMap = applicationContext == null ? null : BeanFactoryUtils.beansOfTypeIncludingAncestors(applicationContext, ApplicationConfig.class, false, false); if (applicationConfigMap != null && applicationConfigMap.size() > 0) { setApplication(applicationConfig); if (getModule() == null && (getConsumer() == null || getConsumer().getModule() == null)) { Map<String, ModuleConfig> moduleConfigMap = applicationContext == null ? null : BeanFactoryUtils.beansOfTypeIncludingAncestors(applicationContext, ModuleConfig.class, false, false); if (moduleConfigMap != null && moduleConfigMap.size() > 0) { setModule(moduleConfig); if ((getRegistries() == null || getRegistries().size() == 0) && (getConsumer() == null || getConsumer().getRegistries() == null || getConsumer().getRegistries().size() == 0) && (getApplication() == null || getApplication().getRegistries() == null || getApplication().getRegistries().size() == 0)) { Map<String, RegistryConfig> registryConfigMap = applicationContext == null ? null : BeanFactoryUtils.beansOfTypeIncludingAncestors(applicationContext, RegistryConfig.class, false, false); if (registryConfigMap != null && registryConfigMap.size() > 0) { if (getMonitor() == null && (getConsumer() == null || getConsumer().getMonitor() == null)
@Override protected ReferenceBean doBuild() { return new ReferenceBean<Object>(); }
public Class<?> getObjectType() { return getInterfaceClass(); }
ReferenceBean<?> referenceConfig = referenceConfigs.get(key); if (referenceConfig == null) { referenceConfig = new ReferenceBean<Object>(reference); if (void.class.equals(reference.interfaceClass()) && "".equals(reference.interfaceName()) && referenceClass.isInterface()) { referenceConfig.setInterface(referenceClass); referenceConfig.setApplicationContext(applicationContext); if (reference.registry().length > 0) { List<RegistryConfig> registryConfigs = new ArrayList<RegistryConfig>(); referenceConfig.setRegistries(registryConfigs); referenceConfig.setConsumer(applicationContext.getBean(reference.consumer(), ConsumerConfig.class)); referenceConfig.setMonitor(applicationContext.getBean(reference.monitor(), MonitorConfig.class)); referenceConfig.setApplication(applicationContext.getBean(reference.application(), ApplicationConfig.class)); referenceConfig.setModule(applicationContext.getBean(reference.module(), ModuleConfig.class)); referenceConfig.setConsumer(applicationContext.getBean(reference.consumer(), ConsumerConfig.class)); referenceConfig.afterPropertiesSet(); } catch (RuntimeException e) { throw e; return referenceConfig.get();
@SuppressWarnings({ "unchecked"}) public void afterPropertiesSet() throws Exception { if (getConsumer() == null) { Map<String, ConsumerConfig> consumerConfigMap = applicationContext == null ? null : BeanFactoryUtils.beansOfTypeIncludingAncestors(applicationContext, ConsumerConfig.class, false, false); if (consumerConfigMap != null && consumerConfigMap.size() > 0) { setConsumer(consumerConfig); if (getApplication() == null && (getConsumer() == null || getConsumer().getApplication() == null)) { Map<String, ApplicationConfig> applicationConfigMap = applicationContext == null ? null : BeanFactoryUtils.beansOfTypeIncludingAncestors(applicationContext, ApplicationConfig.class, false, false); if (applicationConfigMap != null && applicationConfigMap.size() > 0) { setApplication(applicationConfig); if (getModule() == null && (getConsumer() == null || getConsumer().getModule() == null)) { Map<String, ModuleConfig> moduleConfigMap = applicationContext == null ? null : BeanFactoryUtils.beansOfTypeIncludingAncestors(applicationContext, ModuleConfig.class, false, false); if (moduleConfigMap != null && moduleConfigMap.size() > 0) { setModule(moduleConfig); if ((getRegistries() == null || getRegistries().size() == 0) && (getConsumer() == null || getConsumer().getRegistries() == null || getConsumer().getRegistries().size() == 0) && (getApplication() == null || getApplication().getRegistries() == null || getApplication().getRegistries().size() == 0)) { Map<String, RegistryConfig> registryConfigMap = applicationContext == null ? null : BeanFactoryUtils.beansOfTypeIncludingAncestors(applicationContext, RegistryConfig.class, false, false); if (registryConfigMap != null && registryConfigMap.size() > 0) { if (getMonitor() == null && (getConsumer() == null || getConsumer().getMonitor() == null)
@Override public Object getObject() throws Exception { return get(); }
public Class<?> getObjectType() { return getInterfaceClass(); }
ReferenceBean<?> referenceConfig = referenceConfigs.get(key); if (referenceConfig == null) { referenceConfig = new ReferenceBean<Object>(reference); if (void.class.equals(reference.interfaceClass()) && "".equals(reference.interfaceName()) && referenceClass.isInterface()) { referenceConfig.setInterface(referenceClass); referenceConfig.setApplicationContext(applicationContext); if (reference.registry() != null && reference.registry().length > 0) { List<RegistryConfig> registryConfigs = new ArrayList<RegistryConfig>(); referenceConfig.setRegistries(registryConfigs); referenceConfig.setConsumer((ConsumerConfig)applicationContext.getBean(reference.consumer(), ConsumerConfig.class)); referenceConfig.setMonitor((MonitorConfig)applicationContext.getBean(reference.monitor(), MonitorConfig.class)); referenceConfig.setApplication((ApplicationConfig)applicationContext.getBean(reference.application(), ApplicationConfig.class)); referenceConfig.setModule((ModuleConfig)applicationContext.getBean(reference.module(), ModuleConfig.class)); referenceConfig.setConsumer((ConsumerConfig)applicationContext.getBean(reference.consumer(), ConsumerConfig.class)); referenceConfig.afterPropertiesSet(); } catch (RuntimeException e) { throw (RuntimeException) e; return referenceConfig.get();