This is an automated email from the ASF dual-hosted git repository.
mercyblitz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/master by this push:
new 60e72bf Polish /apache/dubbo#5721 : [Enhancement] Setting the default
IDs for Dubbo's Config Beans (#5725)
60e72bf is described below
commit 60e72bf5c91657dfae8106979cd00106e4764bab
Author: Mercy Ma <[email protected]>
AuthorDate: Mon Feb 10 20:13:03 2020 +0800
Polish /apache/dubbo#5721 : [Enhancement] Setting the default IDs for
Dubbo's Config Beans (#5725)
---
...onfigDefaultPropertyValueBeanPostProcessor.java | 105 +++++++++++++++++++++
.../context/DubboBootstrapApplicationListener.java | 7 ++
...DubboLifecycleComponentApplicationListener.java | 7 ++
.../annotation/DubboComponentScanRegistrar.java | 20 +---
.../DubboConfigConfigurationRegistrar.java | 28 +-----
.../DubboLifecycleComponentRegistrar.java | 3 +
.../spring/context/annotation/EnableDubbo.java | 1 -
.../context/annotation/EnableDubboLifecycle.java | 7 +-
...pertyDefaultValueDubboConfigBeanCustomizer.java | 3 +
.../schema/AnnotationBeanDefinitionParser.java | 22 +----
.../dubbo/config/spring/util/DubboBeanUtils.java | 68 +++++++++++++
.../annotation/EnableDubboLifecycleTest.java | 56 -----------
12 files changed, 206 insertions(+), 121 deletions(-)
diff --git
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/config/DubboConfigDefaultPropertyValueBeanPostProcessor.java
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/config/DubboConfigDefaultPropertyValueBeanPostProcessor.java
new file mode 100644
index 0000000..0a33910
--- /dev/null
+++
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/config/DubboConfigDefaultPropertyValueBeanPostProcessor.java
@@ -0,0 +1,105 @@
+/*
+ * 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.beans.factory.config;
+
+import org.apache.dubbo.config.AbstractConfig;
+
+import com.alibaba.spring.beans.factory.config.GenericBeanPostProcessorAdapter;
+import org.springframework.beans.BeansException;
+import
org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor;
+import org.springframework.beans.factory.config.BeanPostProcessor;
+import
org.springframework.beans.factory.support.MergedBeanDefinitionPostProcessor;
+import org.springframework.beans.factory.support.RootBeanDefinition;
+import
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor;
+import org.springframework.core.Ordered;
+
+import javax.annotation.PostConstruct;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+
+import static com.alibaba.spring.util.ObjectUtils.of;
+import static org.springframework.aop.support.AopUtils.getTargetClass;
+import static org.springframework.beans.BeanUtils.getPropertyDescriptor;
+import static org.springframework.util.ReflectionUtils.invokeMethod;
+
+/**
+ * The {@link BeanPostProcessor} class for the default property value of
{@link AbstractConfig Dubbo's Config Beans}
+ *
+ * @since 2.7.6
+ */
+public class DubboConfigDefaultPropertyValueBeanPostProcessor extends
GenericBeanPostProcessorAdapter<AbstractConfig>
+ implements MergedBeanDefinitionPostProcessor, Ordered {
+
+ /**
+ * The bean name of {@link
DubboConfigDefaultPropertyValueBeanPostProcessor}
+ */
+ public static final String BEAN_NAME =
"dubboConfigDefaultPropertyValueBeanPostProcessor";
+
+ protected void processBeforeInitialization(AbstractConfig dubboConfigBean,
String beanName) throws BeansException {
+ // [Feature] https://github.com/apache/dubbo/issues/5721
+ setBeanNameAsDefaultValue(dubboConfigBean, "id", beanName);
+ setBeanNameAsDefaultValue(dubboConfigBean, "name", beanName);
+ }
+
+ @Override
+ public void postProcessMergedBeanDefinition(RootBeanDefinition
beanDefinition, Class<?> beanType, String beanName) {
+ // DO NOTHING
+ }
+
+ protected void setBeanNameAsDefaultValue(Object bean, String propertyName,
String beanName) {
+
+ Class<?> beanClass = getTargetClass(bean);
+
+ PropertyDescriptor propertyDescriptor =
getPropertyDescriptor(beanClass, propertyName);
+
+ if (propertyDescriptor != null) { // the property is present
+
+ Method getNameMethod = propertyDescriptor.getReadMethod();
+
+ if (getNameMethod == null) { // if The getter method is absent
+ return;
+ }
+
+ Object propertyValue = invokeMethod(getNameMethod, bean);
+
+ if (propertyValue != null) { // If The return value of "getName"
method is not null
+ return;
+ }
+
+ Method setNameMethod = propertyDescriptor.getWriteMethod();
+ if (setNameMethod != null) { // the getter and setter methods are
present
+ if (Arrays.equals(of(String.class),
setNameMethod.getParameterTypes())) { // the param type is String
+ // set bean name to the value of the the property
+ invokeMethod(setNameMethod, bean, beanName);
+ }
+ }
+ }
+
+ }
+
+ /**
+ * @return Higher than {@link
InitDestroyAnnotationBeanPostProcessor#getOrder()}
+ * @see InitDestroyAnnotationBeanPostProcessor
+ * @see CommonAnnotationBeanPostProcessor
+ * @see PostConstruct
+ */
+ @Override
+ public int getOrder() {
+ return Ordered.LOWEST_PRECEDENCE + 1;
+ }
+}
diff --git
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/DubboBootstrapApplicationListener.java
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/DubboBootstrapApplicationListener.java
index fd11690..4a98880 100644
---
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/DubboBootstrapApplicationListener.java
+++
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/DubboBootstrapApplicationListener.java
@@ -33,6 +33,13 @@ import org.springframework.core.Ordered;
public class DubboBootstrapApplicationListener extends
OneTimeExecutionApplicationContextEventListener
implements Ordered {
+ /**
+ * The bean name of {@link DubboBootstrapApplicationListener}
+ *
+ * @since 2.7.6
+ */
+ public static final String BEAN_NAME = "dubboBootstrapApplicationListener";
+
private final DubboBootstrap dubboBootstrap;
public DubboBootstrapApplicationListener() {
diff --git
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/DubboLifecycleComponentApplicationListener.java
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/DubboLifecycleComponentApplicationListener.java
index 7aad776..7e7ae83 100644
---
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/DubboLifecycleComponentApplicationListener.java
+++
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/DubboLifecycleComponentApplicationListener.java
@@ -41,6 +41,13 @@ import static
org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncl
*/
public class DubboLifecycleComponentApplicationListener extends
OneTimeExecutionApplicationContextEventListener {
+ /**
+ * The bean name of {@link DubboLifecycleComponentApplicationListener}
+ *
+ * @since 2.7.6
+ */
+ public static final String BEAN_NAME =
"dubboLifecycleComponentApplicationListener";
+
private List<Lifecycle> lifecycleComponents = emptyList();
@Override
diff --git
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/annotation/DubboComponentScanRegistrar.java
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/annotation/DubboComponentScanRegistrar.java
index 7d66b72..4a711ba 100644
---
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/annotation/DubboComponentScanRegistrar.java
+++
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/annotation/DubboComponentScanRegistrar.java
@@ -20,7 +20,6 @@ import org.apache.dubbo.config.annotation.Service;
import
org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor;
import
org.apache.dubbo.config.spring.beans.factory.annotation.ServiceAnnotationBeanPostProcessor;
-import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
@@ -36,7 +35,7 @@ import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.Set;
-import static com.alibaba.spring.util.BeanRegistrar.registerInfrastructureBean;
+import static
org.apache.dubbo.config.spring.util.DubboBeanUtils.registerCommonBeans;
import static
org.springframework.beans.factory.support.BeanDefinitionBuilder.rootBeanDefinition;
/**
@@ -58,8 +57,8 @@ public class DubboComponentScanRegistrar implements
ImportBeanDefinitionRegistra
registerServiceAnnotationBeanPostProcessor(packagesToScan, registry);
- registerReferenceAnnotationBeanPostProcessor(registry);
-
+ // @since 2.7.6 Register the common beans
+ registerCommonBeans(registry);
}
/**
@@ -79,19 +78,6 @@ public class DubboComponentScanRegistrar implements
ImportBeanDefinitionRegistra
}
- /**
- * Registers {@link ReferenceAnnotationBeanPostProcessor} into {@link
BeanFactory}
- *
- * @param registry {@link BeanDefinitionRegistry}
- */
- private void
registerReferenceAnnotationBeanPostProcessor(BeanDefinitionRegistry registry) {
-
- // Register @Reference Annotation Bean Processor
- registerInfrastructureBean(registry,
- ReferenceAnnotationBeanPostProcessor.BEAN_NAME,
ReferenceAnnotationBeanPostProcessor.class);
-
- }
-
private Set<String> getPackagesToScan(AnnotationMetadata metadata) {
AnnotationAttributes attributes = AnnotationAttributes.fromMap(
metadata.getAnnotationAttributes(DubboComponentScan.class.getName()));
diff --git
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/annotation/DubboConfigConfigurationRegistrar.java
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/annotation/DubboConfigConfigurationRegistrar.java
index 9924c00..5417acd 100644
---
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/annotation/DubboConfigConfigurationRegistrar.java
+++
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/annotation/DubboConfigConfigurationRegistrar.java
@@ -17,8 +17,6 @@
package org.apache.dubbo.config.spring.context.annotation;
import org.apache.dubbo.config.AbstractConfig;
-import
org.apache.dubbo.config.spring.beans.factory.annotation.DubboConfigAliasPostProcessor;
-import
org.apache.dubbo.config.spring.context.config.NamePropertyDefaultValueDubboConfigBeanCustomizer;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
@@ -27,8 +25,7 @@ import
org.springframework.core.annotation.AnnotationAttributes;
import org.springframework.core.type.AnnotationMetadata;
import static
com.alibaba.spring.util.AnnotatedBeanDefinitionRegistryUtils.registerBeans;
-import static com.alibaba.spring.util.BeanRegistrar.registerInfrastructureBean;
-import static
org.apache.dubbo.config.spring.context.config.NamePropertyDefaultValueDubboConfigBeanCustomizer.BEAN_NAME;
+import static
org.apache.dubbo.config.spring.util.DubboBeanUtils.registerCommonBeans;
/**
* Dubbo {@link AbstractConfig Config} {@link ImportBeanDefinitionRegistrar
register}, which order can be configured
@@ -55,26 +52,7 @@ public class DubboConfigConfigurationRegistrar implements
ImportBeanDefinitionRe
registerBeans(registry, DubboConfigConfiguration.Multiple.class);
}
- // Register DubboConfigAliasPostProcessor
- registerDubboConfigAliasPostProcessor(registry);
-
- // Register NamePropertyDefaultValueDubboConfigBeanCustomizer
- registerDubboConfigBeanCustomizers(registry);
-
- }
-
- private void registerDubboConfigBeanCustomizers(BeanDefinitionRegistry
registry) {
- registerInfrastructureBean(registry, BEAN_NAME,
NamePropertyDefaultValueDubboConfigBeanCustomizer.class);
+ // Since 2.7.6
+ registerCommonBeans(registry);
}
-
- /**
- * Register {@link DubboConfigAliasPostProcessor}
- *
- * @param registry {@link BeanDefinitionRegistry}
- * @since 2.7.4 [Feature] https://github.com/apache/dubbo/issues/5093
- */
- private void registerDubboConfigAliasPostProcessor(BeanDefinitionRegistry
registry) {
- registerInfrastructureBean(registry,
DubboConfigAliasPostProcessor.BEAN_NAME, DubboConfigAliasPostProcessor.class);
- }
-
}
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
index 20fd1a9..a60b944 100644
---
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
@@ -30,7 +30,10 @@ import static
com.alibaba.spring.util.AnnotatedBeanDefinitionRegistryUtils.regis
* A {@link ImportBeanDefinitionRegistrar register} for the {@link Lifecycle
Dubbo Lifecycle} components
*
* @since 2.7.5
+ * @deprecated as 2.7.6, Dubbo {@link Lifecycle} components will be
registered automatically. Current class may be
+ * removed in the future
*/
+@Deprecated
public class DubboLifecycleComponentRegistrar implements
ImportBeanDefinitionRegistrar {
@Override
diff --git
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/annotation/EnableDubbo.java
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/annotation/EnableDubbo.java
index e07c535..706e288 100644
---
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/annotation/EnableDubbo.java
+++
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/annotation/EnableDubbo.java
@@ -43,7 +43,6 @@ import java.lang.annotation.Target;
@Documented
@EnableDubboConfig
@DubboComponentScan
-@EnableDubboLifecycle
public @interface EnableDubbo {
/**
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 0d484ce..f97c1c5 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
@@ -18,8 +18,6 @@ package org.apache.dubbo.config.spring.context.annotation;
import org.apache.dubbo.common.context.Lifecycle;
-import org.springframework.context.annotation.Import;
-
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
@@ -31,11 +29,14 @@ import java.lang.annotation.Target;
* Enables Dubbo {@link Lifecycle} components
*
* @since 2.7.5
+ * @deprecated as 2.7.6, Dubbo {@link Lifecycle} components will be
registered automatically. Current annotation may be
+ * removed in the future
*/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
-@Import(DubboLifecycleComponentRegistrar.class)
+//@Import(DubboLifecycleComponentRegistrar.class) // Disabled since 2.7.6
+@Deprecated
public @interface EnableDubboLifecycle {
}
diff --git
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/config/NamePropertyDefaultValueDubboConfigBeanCustomizer.java
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/config/NamePropertyDefaultValueDubboConfigBeanCustomizer.java
index cc1753d..175ba33 100644
---
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/config/NamePropertyDefaultValueDubboConfigBeanCustomizer.java
+++
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/config/NamePropertyDefaultValueDubboConfigBeanCustomizer.java
@@ -17,6 +17,7 @@
package org.apache.dubbo.config.spring.context.config;
import org.apache.dubbo.config.AbstractConfig;
+import
org.apache.dubbo.config.spring.beans.factory.config.DubboConfigDefaultPropertyValueBeanPostProcessor;
import org.springframework.util.ReflectionUtils;
@@ -32,7 +33,9 @@ import static
org.springframework.beans.BeanUtils.getPropertyDescriptor;
* if absent.
*
* @since 2.6.6
+ * @deprecated As 2.7.6, use {@link
DubboConfigDefaultPropertyValueBeanPostProcessor}
*/
+@Deprecated
public class NamePropertyDefaultValueDubboConfigBeanCustomizer implements
DubboConfigBeanCustomizer {
/**
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 600197f..bcc16bf 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
@@ -19,15 +19,13 @@ package org.apache.dubbo.config.spring.schema;
import
org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor;
import
org.apache.dubbo.config.spring.beans.factory.annotation.ServiceAnnotationBeanPostProcessor;
-import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.config.BeanDefinition;
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.ParserContext;
import org.w3c.dom.Element;
-import static com.alibaba.spring.util.BeanRegistrar.registerInfrastructureBean;
+import static
org.apache.dubbo.config.spring.util.DubboBeanUtils.registerCommonBeans;
import static
org.springframework.util.StringUtils.commaDelimitedListToStringArray;
import static org.springframework.util.StringUtils.trimArrayElements;
@@ -60,9 +58,8 @@ public class AnnotationBeanDefinitionParser extends
AbstractSingleBeanDefinition
builder.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
- // Registers ReferenceAnnotationBeanPostProcessor
-
registerReferenceAnnotationBeanPostProcessor(parserContext.getRegistry());
-
+ // @since 2.7.6 Register the common beans
+ registerCommonBeans(parserContext.getRegistry());
}
@Override
@@ -70,19 +67,6 @@ public class AnnotationBeanDefinitionParser extends
AbstractSingleBeanDefinition
return true;
}
- /**
- * Registers {@link ReferenceAnnotationBeanPostProcessor} into {@link
BeanFactory}
- *
- * @param registry {@link BeanDefinitionRegistry}
- */
- private void
registerReferenceAnnotationBeanPostProcessor(BeanDefinitionRegistry registry) {
-
- // Register @Reference Annotation Bean Processor
- registerInfrastructureBean(registry,
- ReferenceAnnotationBeanPostProcessor.BEAN_NAME,
ReferenceAnnotationBeanPostProcessor.class);
-
- }
-
@Override
protected Class<?> getBeanClass(Element element) {
return ServiceAnnotationBeanPostProcessor.class;
diff --git
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/util/DubboBeanUtils.java
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/util/DubboBeanUtils.java
new file mode 100644
index 0000000..a9e86e6
--- /dev/null
+++
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/util/DubboBeanUtils.java
@@ -0,0 +1,68 @@
+/*
+ * 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.util;
+
+import
org.apache.dubbo.config.spring.beans.factory.annotation.DubboConfigAliasPostProcessor;
+import
org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor;
+import
org.apache.dubbo.config.spring.beans.factory.config.DubboConfigDefaultPropertyValueBeanPostProcessor;
+import
org.apache.dubbo.config.spring.context.DubboBootstrapApplicationListener;
+import
org.apache.dubbo.config.spring.context.DubboLifecycleComponentApplicationListener;
+
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+
+import static com.alibaba.spring.util.BeanRegistrar.registerInfrastructureBean;
+
+/**
+ * Dubbo Bean utilities class
+ *
+ * @since 2.7.6
+ */
+public interface DubboBeanUtils {
+
+ /**
+ * Register the common beans
+ *
+ * @param registry {@link BeanDefinitionRegistry}
+ * @see ReferenceAnnotationBeanPostProcessor
+ * @see DubboConfigDefaultPropertyValueBeanPostProcessor
+ * @see DubboConfigAliasPostProcessor
+ * @see DubboLifecycleComponentApplicationListener
+ * @see DubboBootstrapApplicationListener
+ */
+ static void registerCommonBeans(BeanDefinitionRegistry registry) {
+
+ // Since 2.5.7 Register @Reference Annotation Bean Processor as an
infrastructure Bean
+ registerInfrastructureBean(registry,
ReferenceAnnotationBeanPostProcessor.BEAN_NAME,
+ ReferenceAnnotationBeanPostProcessor.class);
+
+ // Since 2.7.4 [Feature] https://github.com/apache/dubbo/issues/5093
+ registerInfrastructureBean(registry,
DubboConfigAliasPostProcessor.BEAN_NAME,
+ DubboConfigAliasPostProcessor.class);
+
+ // Since 2.7.5 Register DubboLifecycleComponentApplicationListener as
an infrastructure Bean
+ registerInfrastructureBean(registry,
DubboLifecycleComponentApplicationListener.BEAN_NAME,
+ DubboLifecycleComponentApplicationListener.class);
+
+ // Since 2.7.4 Register DubboBootstrapApplicationListener as an
infrastructure Bean
+ registerInfrastructureBean(registry,
DubboBootstrapApplicationListener.BEAN_NAME,
+ DubboBootstrapApplicationListener.class);
+
+ // ince 2.7.6 Register
DubboConfigDefaultPropertyValueBeanPostProcessor as an infrastructure Bean
+ registerInfrastructureBean(registry,
DubboConfigDefaultPropertyValueBeanPostProcessor.BEAN_NAME,
+ DubboConfigDefaultPropertyValueBeanPostProcessor.class);
+ }
+}
diff --git
a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/context/annotation/EnableDubboLifecycleTest.java
b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/context/annotation/EnableDubboLifecycleTest.java
deleted file mode 100644
index 67aef88..0000000
---
a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/context/annotation/EnableDubboLifecycleTest.java
+++ /dev/null
@@ -1,56 +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.context.annotation;
-
-import org.apache.dubbo.config.ApplicationConfig;
-import org.apache.dubbo.config.bootstrap.DubboBootstrap;
-import org.apache.dubbo.rpc.model.ApplicationModel;
-
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import
org.springframework.context.annotation.AnnotationConfigApplicationContext;
-
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-/**
- * {@link EnableDubboLifecycle} Test
- *
- * @since 2.7.5
- */
-@EnableDubboLifecycle
-public class EnableDubboLifecycleTest {
-
- private AnnotationConfigApplicationContext context;
-
- @BeforeEach
- public void init() {
- ApplicationModel.getConfigManager().setApplication(new
ApplicationConfig("EnableDubboLifecycleTest"));
- context = new
AnnotationConfigApplicationContext(EnableDubboLifecycleTest.class);
- }
-
- @AfterEach
- public void destroy() {
- context.close();
- }
-
- @Test
- public void test() {
- assertTrue(DubboBootstrap.getInstance().isInitialized());
- assertTrue(DubboBootstrap.getInstance().isStarted());
- }
-}