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 0000000000..0a339108a6 --- /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 + 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 fd11690c73..4a988804bf 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 7aad7767cc..7e7ae83971 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 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 7d66b72a9b..4a711ba2bf 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 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 9924c00af8..5417acd54a 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); - + // Since 2.7.6 + registerCommonBeans(registry); } - - private void registerDubboConfigBeanCustomizers(BeanDefinitionRegistry registry) { - registerInfrastructureBean(registry, BEAN_NAME, NamePropertyDefaultValueDubboConfigBeanCustomizer.class); - } - - /** - * 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 20fd1a9d68..a60b944ec1 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 e07c5351f0..706e288597 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 0d484ce3d1..f97c1c5f07 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 cc1753d2b5..175ba3357f 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 600197f0e3..bcc16bfe33 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 0000000000..a9e86e6eec --- /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 67aef88278..0000000000 --- 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()); - } -}