From 959b84fc4312fdf1f773172de58f45de24c0a3ed Mon Sep 17 00:00:00 2001 From: xuchengsheng Date: Fri, 27 Oct 2023 14:07:51 +0800 Subject: [PATCH] =?UTF-8?q?DependsOn=E6=B3=A8=E8=A7=A3=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E6=8F=8F=E8=BF=B0=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spring-annotation-dependsOn/README.md | 32 ++----------------- 1 file changed, 2 insertions(+), 30 deletions(-) diff --git a/spring-annotation/spring-annotation-dependsOn/README.md b/spring-annotation/spring-annotation-dependsOn/README.md index 23763c7..a441a88 100644 --- a/spring-annotation/spring-annotation-dependsOn/README.md +++ b/spring-annotation/spring-annotation-dependsOn/README.md @@ -287,42 +287,14 @@ public void registerBean(Class beanClass) { } ``` -在`org.springframework.context.annotation.AnnotatedBeanDefinitionReader#doRegisterBean`方法中,主要目的是为给定的 `beanClass` 创建一个 bean 定义,并根据提供的参数和注解对其进行配置。 +在`org.springframework.context.annotation.AnnotatedBeanDefinitionReader#doRegisterBean`方法中,主要是处理 bean 定义上的`@DependsOn` 注解。 ```java private void doRegisterBean(Class beanClass, @Nullable String name, @Nullable Class[] qualifiers, @Nullable Supplier supplier, @Nullable BeanDefinitionCustomizer[] customizers) { - // ... [代码部分省略以简化] - - // 获取合并后的本地bean定义(可能包括父bean定义中的属性,如果是子bean定义) - RootBeanDefinition mbd = getMergedLocalBeanDefinition(beanName); - // 检查合并后的bean定义,确保它是有效的并且满足当前的创建需求 - checkMergedBeanDefinition(mbd, beanName, args); - - // 保证初始化当前bean所依赖的其他beans - String[] dependsOn = mbd.getDependsOn(); - if (dependsOn != null) { - for (String dep : dependsOn) { - // 检查是否存在循环依赖,即当前bean也依赖于它自己 - if (isDependent(beanName, dep)) { - throw new BeanCreationException(mbd.getResourceDescription(), beanName, - "Circular depends-on relationship between '" + beanName + "' and '" + dep + "'"); - } - // 在bean之间注册依赖关系 - registerDependentBean(dep, beanName); - try { - // 尝试获取并初始化依赖的bean - getBean(dep); - } - // 如果尝试获取依赖的bean失败,则抛出异常 - catch (NoSuchBeanDefinitionException ex) { - throw new BeanCreationException(mbd.getResourceDescription(), beanName, - "'" + beanName + "' depends on missing bean '" + dep + "'", ex); - } - } - } + AnnotationConfigUtils.processCommonDefinitionAnnotations(abd); // ... [代码部分省略以简化] } ```