From 970d2f0c416f7088c21f114a33ee0b411446d68c Mon Sep 17 00:00:00 2001 From: "ken.lj" Date: Mon, 22 Oct 2018 17:56:38 +0800 Subject: [PATCH] Remove deprecated AnnotationBean, please refer #1485 for the new method to replace. --- ...patibleAnnotationBeanDefinitionParser.java | 5 +- .../dubbo/config/spring/AnnotationBean.java | 324 ------------------ .../AnnotationBeanDefinitionParser.java | 4 +- .../main/resources/META-INF/compat/dubbo.xsd | 25 -- 4 files changed, 2 insertions(+), 356 deletions(-) delete mode 100644 dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/AnnotationBean.java diff --git a/dubbo-compatible/src/main/java/org/apache/dubbo/config/spring/schema/CompatibleAnnotationBeanDefinitionParser.java b/dubbo-compatible/src/main/java/org/apache/dubbo/config/spring/schema/CompatibleAnnotationBeanDefinitionParser.java index c5e7bfaca8c..1172591190a 100644 --- a/dubbo-compatible/src/main/java/org/apache/dubbo/config/spring/schema/CompatibleAnnotationBeanDefinitionParser.java +++ b/dubbo-compatible/src/main/java/org/apache/dubbo/config/spring/schema/CompatibleAnnotationBeanDefinitionParser.java @@ -16,11 +16,8 @@ */ package org.apache.dubbo.config.spring.schema; -import org.apache.dubbo.config.spring.AnnotationBean; - import org.apache.dubbo.config.spring.beans.factory.annotation.CompatibleReferenceAnnotationBeanPostProcessor; import org.apache.dubbo.config.spring.beans.factory.annotation.CompatibleServiceAnnotationBeanPostProcessor; - import org.apache.dubbo.config.spring.util.BeanRegistrar; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.config.BeanDefinition; @@ -35,7 +32,7 @@ import static org.springframework.util.StringUtils.trimArrayElements; /** - * {@link AnnotationBean} {@link BeanDefinitionParser} + * {@link BeanDefinitionParser} * * @see CompatibleServiceAnnotationBeanPostProcessor * @see CompatibleReferenceAnnotationBeanPostProcessor diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/AnnotationBean.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/AnnotationBean.java deleted file mode 100644 index 7612c3302a3..00000000000 --- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/AnnotationBean.java +++ /dev/null @@ -1,324 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.dubbo.config.spring; - -import org.apache.dubbo.common.Constants; -import org.apache.dubbo.common.logger.Logger; -import org.apache.dubbo.common.logger.LoggerFactory; -import org.apache.dubbo.common.utils.ConcurrentHashSet; -import org.apache.dubbo.common.utils.ReflectUtils; -import org.apache.dubbo.config.AbstractConfig; -import org.apache.dubbo.config.ApplicationConfig; -import org.apache.dubbo.config.ConsumerConfig; -import org.apache.dubbo.config.ModuleConfig; -import org.apache.dubbo.config.MonitorConfig; -import org.apache.dubbo.config.ProtocolConfig; -import org.apache.dubbo.config.ProviderConfig; -import org.apache.dubbo.config.ReferenceConfig; -import org.apache.dubbo.config.RegistryConfig; -import org.apache.dubbo.config.ServiceConfig; -import org.apache.dubbo.config.annotation.Reference; -import org.apache.dubbo.config.annotation.Service; -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.DisposableBean; -import org.springframework.beans.factory.config.BeanFactoryPostProcessor; -import org.springframework.beans.factory.config.BeanPostProcessor; -import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; -import org.springframework.beans.factory.support.BeanDefinitionRegistry; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; - -/** - * AnnotationBean - * - * @export - */ -@Deprecated -public class AnnotationBean extends AbstractConfig implements DisposableBean, BeanFactoryPostProcessor, BeanPostProcessor, ApplicationContextAware { - - private static final long serialVersionUID = -7582802454287589552L; - - private static final Logger logger = LoggerFactory.getLogger(Logger.class); - private final Set> serviceConfigs = new ConcurrentHashSet>(); - private final ConcurrentMap> referenceConfigs = new ConcurrentHashMap>(); - private String annotationPackage; - private String[] annotationPackages; - private ApplicationContext applicationContext; - - public String getPackage() { - return annotationPackage; - } - - public void setPackage(String annotationPackage) { - this.annotationPackage = annotationPackage; - this.annotationPackages = (annotationPackage == null || annotationPackage.length() == 0) ? null - : Constants.COMMA_SPLIT_PATTERN.split(annotationPackage); - } - - @Override - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { - this.applicationContext = applicationContext; - } - - @Override - public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) - throws BeansException { - if (annotationPackage == null || annotationPackage.length() == 0) { - return; - } - if (beanFactory instanceof BeanDefinitionRegistry) { - try { - // init scanner - Class scannerClass = ReflectUtils.forName("org.springframework.context.annotation.ClassPathBeanDefinitionScanner"); - Object scanner = scannerClass.getConstructor(new Class[]{BeanDefinitionRegistry.class, boolean.class}).newInstance((BeanDefinitionRegistry) beanFactory, true); - // add filter - Class filterClass = ReflectUtils.forName("org.springframework.core.type.filter.AnnotationTypeFilter"); - Object filter = filterClass.getConstructor(Class.class).newInstance(Service.class); - Method addIncludeFilter = scannerClass.getMethod("addIncludeFilter", ReflectUtils.forName("org.springframework.core.type.filter.TypeFilter")); - addIncludeFilter.invoke(scanner, filter); - // scan packages - String[] packages = Constants.COMMA_SPLIT_PATTERN.split(annotationPackage); - Method scan = scannerClass.getMethod("scan", String[].class); - scan.invoke(scanner, new Object[]{packages}); - } catch (Throwable e) { - // spring 2.0 - } - } - } - - @Override - public void destroy() { - - // This will only be called for singleton scope bean, and expected to be called by spring shutdown hook when BeanFactory/ApplicationContext destroys. - // We will guarantee dubbo related resources being released with dubbo shutdown hook. - - // for (ServiceConfig serviceConfig : serviceConfigs) { - // try { - // serviceConfig.unexport(); - // } catch (Throwable e) { - // logger.error(e.getMessage(), e); - // } - // } - - for (ReferenceConfig referenceConfig : referenceConfigs.values()) { - try { - referenceConfig.destroy(); - } catch (Throwable e) { - logger.error(e.getMessage(), e); - } - } - } - - @Override - public Object postProcessAfterInitialization(Object bean, String beanName) - throws BeansException { - if (!isMatchPackage(bean)) { - return bean; - } - Service service = bean.getClass().getAnnotation(Service.class); - if (service != null) { - ServiceBean serviceConfig = new ServiceBean(service); - serviceConfig.setRef(bean); - if (void.class.equals(service.interfaceClass()) - && "".equals(service.interfaceName())) { - if (bean.getClass().getInterfaces().length > 0) { - serviceConfig.setInterface(bean.getClass().getInterfaces()[0]); - } else { - throw new IllegalStateException("Failed to export remote service class " + bean.getClass().getName() + ", cause: The @Service undefined interfaceClass or interfaceName, and the service class unimplemented any interfaces."); - } - } - if (applicationContext != null) { - serviceConfig.setApplicationContext(applicationContext); - if (service.registry().length > 0) { - List registryConfigs = new ArrayList(); - for (String registryId : service.registry()) { - if (registryId != null && registryId.length() > 0) { - registryConfigs.add(applicationContext.getBean(registryId, RegistryConfig.class)); - } - } - serviceConfig.setRegistries(registryConfigs); - } - if (service.provider().length() > 0) { - serviceConfig.setProvider(applicationContext.getBean(service.provider(), ProviderConfig.class)); - } - if (service.monitor().length() > 0) { - serviceConfig.setMonitor(applicationContext.getBean(service.monitor(), MonitorConfig.class)); - } - if (service.application().length() > 0) { - serviceConfig.setApplication(applicationContext.getBean(service.application(), ApplicationConfig.class)); - } - if (service.module().length() > 0) { - serviceConfig.setModule(applicationContext.getBean(service.module(), ModuleConfig.class)); - } - if (service.provider().length() > 0) { - serviceConfig.setProvider(applicationContext.getBean(service.provider(), ProviderConfig.class)); - } - if (service.protocol().length > 0) { - List protocolConfigs = new ArrayList(); - for (String protocolId : service.protocol()) { - if (protocolId != null && protocolId.length() > 0) { - protocolConfigs.add(applicationContext.getBean(protocolId, ProtocolConfig.class)); - } - } - serviceConfig.setProtocols(protocolConfigs); - } - if (service.tag().length() > 0) { - serviceConfig.setTag(service.tag()); - } - try { - serviceConfig.afterPropertiesSet(); - } catch (RuntimeException e) { - throw e; - } catch (Exception e) { - throw new IllegalStateException(e.getMessage(), e); - } - } - serviceConfigs.add(serviceConfig); - serviceConfig.export(); - } - return bean; - } - - @Override - public Object postProcessBeforeInitialization(Object bean, String beanName) - throws BeansException { - if (!isMatchPackage(bean)) { - return bean; - } - Method[] methods = bean.getClass().getMethods(); - for (Method method : methods) { - String name = method.getName(); - if (name.length() > 3 && name.startsWith("set") - && method.getParameterTypes().length == 1 - && Modifier.isPublic(method.getModifiers()) - && !Modifier.isStatic(method.getModifiers())) { - try { - Reference reference = method.getAnnotation(Reference.class); - if (reference != null) { - Object value = refer(reference, method.getParameterTypes()[0]); - if (value != null) { - method.invoke(bean, value); - } - } - } catch (Throwable e) { - logger.error("Failed to init remote service reference at method " + name + " in class " + bean.getClass().getName() + ", cause: " + e.getMessage(), e); - } - } - } - Field[] fields = bean.getClass().getDeclaredFields(); - for (Field field : fields) { - try { - if (!field.isAccessible()) { - field.setAccessible(true); - } - Reference reference = field.getAnnotation(Reference.class); - if (reference != null) { - Object value = refer(reference, field.getType()); - if (value != null) { - field.set(bean, value); - } - } - } catch (Throwable e) { - logger.error("Failed to init remote service reference at filed " + field.getName() + " in class " + bean.getClass().getName() + ", cause: " + e.getMessage(), e); - } - } - return bean; - } - - private Object refer(Reference reference, Class referenceClass) { //method.getParameterTypes()[0] - String interfaceName; - if (!"".equals(reference.interfaceName())) { - interfaceName = reference.interfaceName(); - } else if (!void.class.equals(reference.interfaceClass())) { - interfaceName = reference.interfaceClass().getName(); - } else if (referenceClass.isInterface()) { - interfaceName = referenceClass.getName(); - } else { - throw new IllegalStateException("The @Reference undefined interfaceClass or interfaceName, and the property type " + referenceClass.getName() + " is not a interface."); - } - String key = reference.group() + "/" + interfaceName + ":" + reference.version(); - ReferenceBean referenceConfig = referenceConfigs.get(key); - if (referenceConfig == null) { - referenceConfig = new ReferenceBean(reference); - if (void.class.equals(reference.interfaceClass()) - && "".equals(reference.interfaceName()) - && referenceClass.isInterface()) { - referenceConfig.setInterface(referenceClass); - } - if (applicationContext != null) { - referenceConfig.setApplicationContext(applicationContext); - if (reference.registry().length > 0) { - List registryConfigs = new ArrayList(); - for (String registryId : reference.registry()) { - if (registryId != null && registryId.length() > 0) { - registryConfigs.add(applicationContext.getBean(registryId, RegistryConfig.class)); - } - } - referenceConfig.setRegistries(registryConfigs); - } - if (reference.consumer().length() > 0) { - referenceConfig.setConsumer(applicationContext.getBean(reference.consumer(), ConsumerConfig.class)); - } - if (reference.monitor().length() > 0) { - referenceConfig.setMonitor(applicationContext.getBean(reference.monitor(), MonitorConfig.class)); - } - if (reference.application().length() > 0) { - referenceConfig.setApplication(applicationContext.getBean(reference.application(), ApplicationConfig.class)); - } - if (reference.module().length() > 0) { - referenceConfig.setModule(applicationContext.getBean(reference.module(), ModuleConfig.class)); - } - if (reference.consumer().length() > 0) { - referenceConfig.setConsumer(applicationContext.getBean(reference.consumer(), ConsumerConfig.class)); - } - try { - referenceConfig.afterPropertiesSet(); - } catch (RuntimeException e) { - throw e; - } catch (Exception e) { - throw new IllegalStateException(e.getMessage(), e); - } - } - referenceConfigs.putIfAbsent(key, referenceConfig); - referenceConfig = referenceConfigs.get(key); - } - return referenceConfig.get(); - } - - private boolean isMatchPackage(Object bean) { - if (annotationPackages == null || annotationPackages.length == 0) { - return true; - } - String beanClassName = bean.getClass().getName(); - for (String pkg : annotationPackages) { - if (beanClassName.startsWith(pkg)) { - return true; - } - } - return false; - } - -} diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/schema/AnnotationBeanDefinitionParser.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/schema/AnnotationBeanDefinitionParser.java index 833f816cd41..e47aec45b40 100644 --- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/schema/AnnotationBeanDefinitionParser.java +++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/schema/AnnotationBeanDefinitionParser.java @@ -16,7 +16,6 @@ */ package org.apache.dubbo.config.spring.schema; -import org.apache.dubbo.config.spring.AnnotationBean; import org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor; import org.apache.dubbo.config.spring.beans.factory.annotation.ServiceAnnotationBeanPostProcessor; import org.apache.dubbo.config.spring.util.BeanRegistrar; @@ -25,7 +24,6 @@ import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; -import org.springframework.beans.factory.xml.BeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; import org.w3c.dom.Element; @@ -33,7 +31,7 @@ import static org.springframework.util.StringUtils.trimArrayElements; /** - * {@link AnnotationBean} {@link BeanDefinitionParser} + * @link BeanDefinitionParser} * * @see ServiceAnnotationBeanPostProcessor * @see ReferenceAnnotationBeanPostProcessor diff --git a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd index 92d7bd27056..68f3a77a76c 100644 --- a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd +++ b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd @@ -1153,31 +1153,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - -