You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by cr...@apache.org on 2023/06/29 02:31:41 UTC
[dubbo] branch 3.2 updated: Enable spring bean autowired to get scope model in advance (#12608)
This is an automated email from the ASF dual-hosted git repository.
crazyhzm pushed a commit to branch 3.2
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.2 by this push:
new 563a0e472a Enable spring bean autowired to get scope model in advance (#12608)
563a0e472a is described below
commit 563a0e472ab50d2d697e2f0415c80b68ad6b17bd
Author: Albumen Kevin <jh...@gmail.com>
AuthorDate: Thu Jun 29 10:31:36 2023 +0800
Enable spring bean autowired to get scope model in advance (#12608)
* Enable spring bean autowired to get scope model in advance
* Fix uts
* Fix uts
---
.../java/org/apache/dubbo/config/spring/ServiceBean.java | 14 ++++++++++----
.../factory/annotation/ServiceAnnotationPostProcessor.java | 1 +
.../config/spring/schema/DubboBeanDefinitionParser.java | 3 +++
.../apache/dubbo/config/spring/util/DubboBeanUtils.java | 6 +++---
.../org/apache/dubbo/config/spring/ServiceBeanTest.java | 4 ++--
.../config/spring/status/DataSourceStatusCheckerTest.java | 4 ++--
6 files changed, 21 insertions(+), 11 deletions(-)
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ServiceBean.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ServiceBean.java
index 0d209a14f1..8fd1ed9b11 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ServiceBean.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ServiceBean.java
@@ -52,24 +52,30 @@ public class ServiceBean<T> extends ServiceConfig<T> implements InitializingBean
private ApplicationEventPublisher applicationEventPublisher;
- public ServiceBean() {
+ public ServiceBean(ApplicationContext applicationContext) {
super();
this.service = null;
+ this.applicationContext = applicationContext;
+ this.setScopeModel(DubboBeanUtils.getModuleModel(applicationContext));
}
- public ServiceBean(ModuleModel moduleModel) {
+ public ServiceBean(ApplicationContext applicationContext, ModuleModel moduleModel) {
super(moduleModel);
this.service = null;
+ this.applicationContext = applicationContext;
}
- public ServiceBean(Service service) {
+ public ServiceBean(ApplicationContext applicationContext, Service service) {
super(service);
this.service = service;
+ this.applicationContext = applicationContext;
+ this.setScopeModel(DubboBeanUtils.getModuleModel(applicationContext));
}
- public ServiceBean(ModuleModel moduleModel, Service service) {
+ public ServiceBean(ApplicationContext applicationContext, ModuleModel moduleModel, Service service) {
super(moduleModel, service);
this.service = service;
+ this.applicationContext = applicationContext;
}
@Override
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationPostProcessor.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationPostProcessor.java
index 4ce2c0caef..b8fff6b83e 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationPostProcessor.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationPostProcessor.java
@@ -428,6 +428,7 @@ public class ServiceAnnotationPostProcessor implements BeanDefinitionRegistryPos
BeanDefinitionBuilder builder = rootBeanDefinition(ServiceBean.class);
AbstractBeanDefinition beanDefinition = builder.getBeanDefinition();
+ beanDefinition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_CONSTRUCTOR);
MutablePropertyValues propertyValues = beanDefinition.getPropertyValues();
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/schema/DubboBeanDefinitionParser.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/schema/DubboBeanDefinitionParser.java
index 31dbb290bf..9250b27243 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/schema/DubboBeanDefinitionParser.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/schema/DubboBeanDefinitionParser.java
@@ -98,6 +98,9 @@ public class DubboBeanDefinitionParser implements BeanDefinitionParser {
RootBeanDefinition beanDefinition = new RootBeanDefinition();
beanDefinition.setBeanClass(beanClass);
beanDefinition.setLazyInit(false);
+ if (ServiceBean.class.equals(beanClass)) {
+ beanDefinition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_CONSTRUCTOR);
+ }
// config id
String configId = resolveAttribute(element, "id", parserContext);
if (StringUtils.isNotEmpty(configId)) {
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
index c369b1173e..ae6854142c 100644
--- 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
@@ -181,7 +181,7 @@ public interface DubboBeanUtils {
static DubboSpringInitContext getInitializationContext(BeanFactory beanFactory) {
String beanName = DubboSpringInitContext.class.getName();
- if (beanFactory.containsBean(beanName)) {
+ if (beanFactory != null && beanFactory.containsBean(beanName)) {
return beanFactory.getBean(beanName, DubboSpringInitContext.class);
}
return null;
@@ -189,7 +189,7 @@ public interface DubboBeanUtils {
static ApplicationModel getApplicationModel(BeanFactory beanFactory) {
String beanName = ApplicationModel.class.getName();
- if (beanFactory.containsBean(beanName)) {
+ if (beanFactory != null && beanFactory.containsBean(beanName)) {
return beanFactory.getBean(beanName, ApplicationModel.class);
}
return null;
@@ -197,7 +197,7 @@ public interface DubboBeanUtils {
static ModuleModel getModuleModel(BeanFactory beanFactory) {
String beanName = ModuleModel.class.getName();
- if (beanFactory.containsBean(beanName)) {
+ if (beanFactory != null && beanFactory.containsBean(beanName)) {
return beanFactory.getBean(beanName, ModuleModel.class);
}
return null;
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/ServiceBeanTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/ServiceBeanTest.java
index f4fe893a49..804575eac4 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/ServiceBeanTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/ServiceBeanTest.java
@@ -43,7 +43,7 @@ class ServiceBeanTest {
@Test
void testGetService() {
TestService service = mock(TestService.class);
- ServiceBean serviceBean = new ServiceBean(service);
+ ServiceBean serviceBean = new ServiceBean(null, service);
Service beanService = serviceBean.getService();
MatcherAssert.assertThat(beanService, not(nullValue()));
@@ -52,4 +52,4 @@ class ServiceBeanTest {
abstract class TestService implements Service {
}
-}
\ No newline at end of file
+}
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/status/DataSourceStatusCheckerTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/status/DataSourceStatusCheckerTest.java
index 14d74f4113..b17e04a7f2 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/status/DataSourceStatusCheckerTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/status/DataSourceStatusCheckerTest.java
@@ -51,7 +51,7 @@ class DataSourceStatusCheckerTest {
public void setUp() throws Exception {
initMocks(this);
this.dataSourceStatusChecker = new DataSourceStatusChecker(applicationContext);
- new ServiceBean<Object>().setApplicationContext(applicationContext);
+ new ServiceBean<Object>(applicationContext).setApplicationContext(applicationContext);
}
@AfterEach
@@ -105,4 +105,4 @@ class DataSourceStatusCheckerTest {
assertThat(status.getLevel(), is(Status.Level.ERROR));
}
-}
\ No newline at end of file
+}