From 492bc640ed0121e274ff1e61b10d4688a5807c4a Mon Sep 17 00:00:00 2001 From: mercyblitz Date: Wed, 21 Aug 2019 16:12:11 +0800 Subject: [PATCH] Polish apache/dubbo#4910 : [Feature] To suppoort DubboLifecycleComponentApplicationListener in Spring XML scenario --- ...ifecycleComponentApplicationListener.java} | 2 +- .../DubboLifecycleComponentRegistrar.java | 39 +++++++++++++++++++ .../annotation/EnableDubboLifecycle.java | 4 +- .../spring/schema/DubboNamespaceHandler.java | 28 +++++++++++-- 4 files changed, 65 insertions(+), 8 deletions(-) rename dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/{DubboLifecycleComponentsApplicationListener.java => DubboLifecycleComponentApplicationListener.java} (97%) create mode 100644 dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/annotation/DubboLifecycleComponentRegistrar.java diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/DubboLifecycleComponentsApplicationListener.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/DubboLifecycleComponentApplicationListener.java similarity index 97% rename from dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/DubboLifecycleComponentsApplicationListener.java rename to dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/DubboLifecycleComponentApplicationListener.java index 19365d7c572..11dd51c11e3 100644 --- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/DubboLifecycleComponentsApplicationListener.java +++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/DubboLifecycleComponentApplicationListener.java @@ -42,7 +42,7 @@ * @see SmartApplicationListener * @since 2.7.4 */ -public class DubboLifecycleComponentsApplicationListener implements ApplicationListener { +public class DubboLifecycleComponentApplicationListener implements ApplicationListener { private List lifecycleComponents = emptyList(); diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/annotation/DubboLifecycleComponentRegistrar.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/annotation/DubboLifecycleComponentRegistrar.java new file mode 100644 index 00000000000..5c7cab41565 --- /dev/null +++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/annotation/DubboLifecycleComponentRegistrar.java @@ -0,0 +1,39 @@ +/* + * 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.context.annotation; + +import org.apache.dubbo.common.context.Lifecycle; +import org.apache.dubbo.config.spring.context.DubboLifecycleComponentApplicationListener; + +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; +import org.springframework.core.type.AnnotationMetadata; + +import static org.apache.dubbo.config.spring.util.AnnotatedBeanDefinitionRegistryUtils.registerBeans; + +/** + * A {@link ImportBeanDefinitionRegistrar register} for the {@link Lifecycle Dubbo Lifecycle} components + * + * @since 2.7.4 + */ +public class DubboLifecycleComponentRegistrar implements ImportBeanDefinitionRegistrar { + + @Override + public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { + registerBeans(registry, DubboLifecycleComponentApplicationListener.class); + } +} diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/annotation/EnableDubboLifecycle.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/annotation/EnableDubboLifecycle.java index 0abd18e405b..74ca3f3c6a7 100644 --- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/annotation/EnableDubboLifecycle.java +++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/annotation/EnableDubboLifecycle.java @@ -16,8 +16,6 @@ */ package org.apache.dubbo.config.spring.context.annotation; -import org.apache.dubbo.config.spring.context.DubboLifecycleComponentsApplicationListener; - import org.springframework.context.Lifecycle; import org.springframework.context.annotation.Import; @@ -37,6 +35,6 @@ @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented -@Import(DubboLifecycleComponentsApplicationListener.class) +@Import(DubboLifecycleComponentRegistrar.class) public @interface EnableDubboLifecycle { } diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/schema/DubboNamespaceHandler.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/schema/DubboNamespaceHandler.java index ddafd031586..4f3f086c180 100644 --- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/schema/DubboNamespaceHandler.java +++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/schema/DubboNamespaceHandler.java @@ -30,6 +30,8 @@ import org.apache.dubbo.config.spring.ReferenceBean; import org.apache.dubbo.config.spring.ServiceBean; import org.apache.dubbo.config.spring.beans.factory.config.ConfigurableSourceBeanMetadataElement; +import org.apache.dubbo.config.spring.context.DubboLifecycleComponentApplicationListener; +import org.apache.dubbo.config.spring.util.AnnotatedBeanDefinitionRegistryUtils; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionRegistry; @@ -38,6 +40,8 @@ import org.springframework.context.annotation.AnnotationConfigUtils; import org.w3c.dom.Element; +import static org.apache.dubbo.config.spring.util.AnnotatedBeanDefinitionRegistryUtils.registerBeans; + /** * DubboNamespaceHandler * @@ -76,18 +80,34 @@ public void init() { */ @Override public BeanDefinition parse(Element element, ParserContext parserContext) { - registerAnnotationConfigProcessors(parserContext); + BeanDefinitionRegistry registry = parserContext.getRegistry(); + registerAnnotationConfigProcessors(registry); + registerDubboLifecycleComponentApplicationListener(registry); BeanDefinition beanDefinition = super.parse(element, parserContext); setSource(beanDefinition); return beanDefinition; } /** - * @param parserContext {@link ParserContext} + * Register {@link DubboLifecycleComponentApplicationListener} as a Spring Bean + * + * @param registry {@link BeanDefinitionRegistry} + * @see DubboLifecycleComponentApplicationListener + * @see AnnotatedBeanDefinitionRegistryUtils#registerBeans(BeanDefinitionRegistry, Class[]) * @since 2.7.4 */ - private void registerAnnotationConfigProcessors(ParserContext parserContext) { - BeanDefinitionRegistry registry = parserContext.getRegistry(); + private void registerDubboLifecycleComponentApplicationListener(BeanDefinitionRegistry registry) { + registerBeans(registry, DubboLifecycleComponentApplicationListener.class); + } + + /** + * Register the processors for the Spring Annotation-Driven features + * + * @param registry {@link BeanDefinitionRegistry} + * @see AnnotationConfigUtils + * @since 2.7.4 + */ + private void registerAnnotationConfigProcessors(BeanDefinitionRegistry registry) { AnnotationConfigUtils.registerAnnotationConfigProcessors(registry); } }