91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring注解@DependsOn怎么使用

發布時間:2023-04-24 15:45:00 來源:億速云 閱讀:177 作者:iii 欄目:開發技術

本篇內容介紹了“Spring注解@DependsOn怎么使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

注解詳情

@DependsOn注解可以標注在類上和方法上面,只有一個屬性value,它是一個數組,表示依賴的bean名稱的數組,可以指定一個或者多個。

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DependsOn {

	String[] value() default {};

使用

如下,在DependsOnBeanA上標注了@DependsOn注解,那么DependsOnBeanA需要在Bean dependsOnBeanB創建完成之后才能創建自己,這里value的值為bean的名稱,如果沒有對bean設置名稱,那么就為首字母為小寫的類名。

@Component
@DependsOn(value = {"dependsOnBeanB"})
public class DependsOnBeanA {

}

源碼解析

spring掃描到所有的標有@Component(@Service,@Repository等注解本質就是@Component)的類和標有@Bean的方法后,會進行處理,這里,它會判斷是否標注有@DependsOn,如果標注有,則會設置BeanDefinition的dependsOn,設置其依賴的bean,如下在AnnotationConfigUtils注解工具類中源碼如下。

static void processCommonDefinitionAnnotations(AnnotatedBeanDefinition abd, AnnotatedTypeMetadata metadata) {
    //省略若干代碼
		AnnotationAttributes dependsOn = attributesFor(metadata, DependsOn.class);
		if (dependsOn != null) {
			  abd.setDependsOn(dependsOn.getStringArray("value"));
		}
	}

上面是在注冊bean元數據階段,注冊元數據階段只是組裝好bean之間的依賴,然后在真正創建bean的時候,才會進行判斷,如下在AbstractBeanFactory類中的doGetBean中,會從RootBeanDefinition中取出dependsOn的值,不為空則進行bean的創建,創建bean的過程和其他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,沒有的話就往下執行。

“Spring注解@DependsOn怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宾阳县| 天祝| 汉寿县| 赤壁市| 韶关市| 崇仁县| 济阳县| 翁牛特旗| 通州市| 赤城县| 化州市| 荣昌县| 望江县| 重庆市| 云龙县| 肥乡县| 苍溪县| 平利县| 大同市| 定兴县| 新巴尔虎左旗| 嘉荫县| 文昌市| 富顺县| 玉树县| 额敏县| 临泽县| 扎赉特旗| 盘锦市| 台东市| 绍兴县| 清流县| 蕉岭县| 静乐县| 绿春县| 翁源县| 灵川县| 广丰县| 北宁市| 株洲县| 克东县|