介绍
今天要分享的是Spring的@DependsOn注解,对于@DependsOn,我们从它的名称里面就能看出意思是“依赖于”,那么在Spring中,它的作用就是解决Bean的创建依赖,比如某个Bean在创建的时候依赖另外一个bean,所以需要另外一个bean先创建,然后再创建自己。
注解详情
@DependsOn注解可以标注在类上和方法上面,只有一个属性value,它是一个数组,表示依赖的bean名称的数组,可以指定一个或者多个。
protected <T> T doGetBean(String name, @Nullable Class<T> requiredType, @Nullable Object[] args, boolean typeCheckOnly)
throws BeansException {
RootBeanDefinition mbd = getMergedLocalBeanDefinition(beanName);
// Guarantee initialization of beans that the current bean depends on.
String[] dependsOn = mbd.getDependsOn();
if (dependsOn != null) {
for (String dep : dependsOn) {
if (isDependent(beanName, dep)) {
throw new BeanCreationException(mbd.getResourceDescription(), beanName,
"Circular depends-on relationship between '" + beanName + "' and '" + dep + "'");
}
registerDependentBean(dep, beanName);
try {
getBean(dep);
} catch (NoSuchBeanDefinitionException ex) {
throw new BeanCreationException(mbd.getResourceDescription(), beanName,
"'" + beanName + "' depends on missing bean '" + dep + "'", ex);
}
}
}
}
从上面可以看出,其实还是比较简单,主要就是判断是否有依赖的bean,如果有就先创建依赖的bean,没有的话就往下执行。
总结
上面我们对@DependsOn作了简单的介绍,对其的使用方法进行简单示例,也对核心源码进行分析,还是比较简单,他们都是bean创建过程中的一些增强,spring的创建过程还是比较简单,但是就是因为它的功能点比较多,所以在创建过程中会有各种扩展,各种判断,所以就会变得很复杂,不过它的主线还是比较清晰的,在进行分析的时候,可以先从主线进行分析,然后再慢慢去看主线分出去的逻辑。
❝
今天的分享就到这里,感谢你的观看,下期见。
本篇文章来源于微信公众号: 刘牌
微信扫描下方的二维码阅读本文

Comments NOTHING