日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

autowired java_Java 基础之Autowired 是否是自动注入

發布時間:2023/11/27 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 autowired java_Java 基础之Autowired 是否是自动注入 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java 基礎之Autowired 是否是自動注入

相信很多人對Autowired 注解理解不深入,或者是認為此注解就是spring的自動注入。相信看完本篇文章,你會有更加不一樣的理解。

首先我們先看下什么是手動注入?在我們的spring應用程序中,定義多個類,其中某些類依賴某些類,xml中要描述類與類之間的依賴關系,這種由程序員定義,并且描述好依賴關系的用法,我們稱之為手動注入。我們看個例子:

上面我們定義了兩個類,X 依賴于 Y 類,并且我們在xml 中定義了他們的依賴關系,當我們啟動spring 應用程序時候,會發現有如下打印

hello set method ...

Process finished with exit code 0

DI(依賴注入)一共有兩種主要的方式,分別是基于構造方法的依賴注入和基于setter方法的依賴注入,不管是手動裝配還是自動裝配都是基于這兩種方式來的。@Autowired這種注入方式是上述setter方式的變體,基于反射技術,實現屬性注入。

此處,需要注意的是,如果去掉X中的Y屬性,打印是相同的。

spring官網有說明自動裝配有四種模型分表是no、bytype、byname、constructor。由于Autowired注解首先根據類型注入,所以容易讓程序員認為Autowired注解也是自動注入。其實他們不是一回事。

先給出結論,此處借用大神的一段話:依賴注入是一個過程,主要通過setter和構造方法以及一些變體的方式完成把對象依賴、或者填充上的這個過程叫做依賴注入,不管手動裝配還是自動裝配都有這個過程;而自動裝配模型是一種完成自動裝配依賴的手段體現,每一種模型都使用了不同的技術去查找和填充bean;而從spring官網上面可以看到spring只提出了4中自動裝配模型(嚴格意義上是三種、因為第一種是no,表示不使用自動裝配、使用),這四個模型分別用一個整形來表示,存在spring的beanDefinition當中,任何一個類默認是no這個裝配模型,也就是一個被注解的類默認的裝配模型是no也就是手動裝配;其中no用0來表示;bytype用2來表示;如果某個類X,假設X的bean對應的beanDefinition當中的autowireMode=2則表示這個類X的自動裝配模型為bytype;如果autowireMode=1則表示為byname裝配模型。

上面代碼基礎上增加一個類如下:

可以看到打印如下

...

2

hello set method ...

Process finished with exit code 0

如果將xml去掉,每個類上面加Component注解,如下

打印結果如上所示,可以證明Autowired的bean definition中自動注入模型為0,不屬于自動注入。

總結

以上是生活随笔為你收集整理的autowired java_Java 基础之Autowired 是否是自动注入的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

歡迎分享!

轉載請說明來源于"生活随笔",并保留原作者的名字。

本文地址:autowired java_Java 基础之Autowir