Annotation

大家好,我是IT修真院上海分院第02期學(xué)員,一枚正直善良的Java程序員。

今天給大家分享一下,修真院官網(wǎng)task2任務(wù)中可能會使用到的知識點:

使用Annotation時需要有哪些配置?它的加載過程是怎樣實現(xiàn)的?



undefined_騰訊視頻

1.背景介紹

在編程中,一直強(qiáng)調(diào)的一點就是注釋的編寫,注釋的規(guī)范等等。尤其是越是核心,程序越復(fù)雜,邏輯越多的情況下,注釋的編寫對我們以后的閱讀代碼,維護(hù)軟件起著至關(guān)重要的作用。一款軟件有著好的注釋,相當(dāng)于一個中國人閱讀一篇帶著漢語翻譯的英文文章,其閱讀速度是事半功倍的效果。但是今天想要總結(jié)的卻不是代碼中的注釋需要注意的問題,而是JDK5.0以后提供的一種新特性。


2.知識剖析

(一)注解開發(fā)介紹

Annotation(注解),其實就是對類,方法,屬性進(jìn)行的一種標(biāo)示,一種注釋(注意,這個里注釋不是為了讓我們開發(fā)或維護(hù)人員閱讀更方便,而是為JVM看呢),通過這些標(biāo)示,Java虛擬機(jī)可以完成這些標(biāo)示對應(yīng)的功能。例如使用框架開發(fā)時,我們都是通過配置文件進(jìn)行對象關(guān)系組合映射等功能,而通過注解我們可以完全代替配置文件的編寫。

Annotation的作用:

編寫文檔:通過代碼里標(biāo)識的元數(shù)據(jù)生成文檔。

代碼分析:通過代碼里標(biāo)識的元數(shù)據(jù)對代碼進(jìn)行分析。

編譯檢查:通過代碼里標(biāo)識的元數(shù)據(jù)讓編譯器能實現(xiàn)基本的編譯檢查。

JDK內(nèi)置的幾個常用注解:

(1)@Override:此注解能夠?qū)崿F(xiàn)編譯時檢查,當(dāng)某方法前邊添加此注解時,表示此方法為重寫父類中的方法。如果此方法不是父類的方法,例如我們本來想重寫toString呢,卻寫成了tostring,則編譯無法通過,會提示錯誤。

(2)@Deprecated:此注解是對不應(yīng)該,或者將要淘汰的方法進(jìn)行標(biāo)識,當(dāng)編程人員使用時就會給予提示。

(3)@SuppressWanings:此注解表示去除一些警告,但是里邊需要我們制定參數(shù)。

(4)@interface進(jìn)行自定義注解的定義。我們可以像@SuppressWanings一樣向里邊添加參數(shù)。比如利用@Target注解來指定其使用范圍;@Documented表示此注解是否文檔化,就是當(dāng)我們生成文檔時,是否生成進(jìn)去;@Inherited標(biāo)注繼承,控制此注釋是否會影響到子類等等。

(二)Spring注解開發(fā)

Spring框架的核心功能IoC(Inversion of Control),也就是通過Spring容器進(jìn)行對象的管理,以及對象之間組合關(guān)系的映射。通常情況下我們會在xml配置文件中進(jìn)行action,service,dao等層的聲明,然后并告知框架我們想要的注入方式,然后在類中聲明要組合類的get,set方法。而通過Spring框架中注解的運(yùn)用也就主要是解決這類問題的。而框架中另一個核心知識AOP,一種面向橫切面的方法編程,在程序中一般都是進(jìn)行一次設(shè)置就可以的,所以都還放在配置文件中。例如聲明式事物的設(shè)置,一次設(shè)置,后邊就不用管了,所以這個沒有必要使用注解進(jìn)行簡化。

1.首先需要在配置文件中增加命名空間的和約束文件

2.開啟Spring的注解功能,這樣Spring環(huán)境才會進(jìn)行指定位置的掃描,進(jìn)行類之間的關(guān)聯(lián)組合

3.聲明注解類,讓Spring框架可以識別

(1)類的分層注解,由于我們后臺開發(fā)都是分為三層進(jìn)行開發(fā)的,所以Spring框架提供了三種對于不同層的注解方式:

控制層:@Controller

服務(wù)層:@Service

持久層:@Repository

默認(rèn)情況下使用注解聲明的Bean對象id名稱為:類名稱的首字母小寫,一般不需要我們進(jìn)行設(shè)置,如果想要設(shè)置時,例如我們指定的是實現(xiàn)類,而名字指向了接口,直接添加value屬性即可:@Service(value="name"),當(dāng)然value是可以省略的。

Spring框架還為我們提供了代替上邊三個分層注解的通用注解:@Component.當(dāng)然提倡大家使用分層注解更好一些,區(qū)分層次比較明確。

(2)自動裝配功能的實現(xiàn)對象之間的組合關(guān)系,在屬性前邊指定下邊的注解:

@Autowired : 采用類型的方式完成自動裝配 : byType

@Resource : 采用名稱+類型的方式完成自動裝配 : byName +byType

另外Spring提供的兩種注解的自動裝配功能,屬性不需要聲明set,get方法也可以完成組合功能,這是非常方便的。


3.常見問題

在開發(fā)中我們應(yīng)該選擇使用配置文件開發(fā),還是使用注解開發(fā)?


4.解決方案

(1)注解開發(fā)的優(yōu)缺點

優(yōu)點:1)開發(fā)速度快;2)編譯期間容易發(fā)現(xiàn)錯誤的出處 。

缺點:1)管理分散,基本每個類上都有;2)擴(kuò)展功能時,沒有遵循OCP開發(fā)原則。

(2)配置文件開發(fā)的優(yōu)缺點

優(yōu)點:1)遵循OCP開發(fā)原則,修改配置文件即可進(jìn)行功能擴(kuò)展;2)集中管理對象和對象之間的組合關(guān)系,易于閱讀。

缺點:1)開發(fā)速度相對較慢;2)編譯時很難檢查出錯誤,運(yùn)行中的錯誤很難定位,調(diào)試難度較大。

如果客戶需求不會頻繁發(fā)生變化。那么使用注解非常好,開發(fā)效率快。

如果客戶需求經(jīng)常發(fā)生變化,那么采用配置文件的方式會好一些。有利于擴(kuò)展。


5.編碼實戰(zhàn)


6.擴(kuò)展思考

在使用框架開發(fā)中,如何利用注解幫助我們提高效率?


7.參考文獻(xiàn)

文獻(xiàn)一:http://blog.csdn.net/liujiahan629629/article/details/22325155

文獻(xiàn)二:http://blog.csdn.net/liujiahan629629/article/details/22696031


8.更多討論

問:注解換一下有效嗎?

答:Spring框架提供的是三種對于不同層的注解方式,所以他知識一種注解方式。另外還有同樣注解。所以換名稱是有效的,他知識一種標(biāo)示,主要是看注解存在與那個類上,他就會把那個類注入的容器中。

問:注解的使用場合是啥?還是所有情況都能用

答:并不是所有情況都能用。像AOP,數(shù)據(jù)源等是需要配置文件配置的。

問:采用注解的話是否算是侵入式編程

答:如果說算,是因為加注解,則需要依賴注解的類型,并且注解也會編譯到class中。

如果說不算,是因為注解可以和框架主體分離,依賴注解不代表依賴框架。而且從邏輯上講,注解屬于元數(shù)據(jù),不影響執(zhí)行(如果不反射也不自行解析字節(jié)碼,jvm不會管注解)

問:約定大于配置,對于這句話你怎么理解

答:所謂的約定優(yōu)于配置就是指在程序開發(fā)過程中我們約定好一些規(guī)則可以使我們更少的進(jìn)行配置和代碼編寫。

問:解釋一下命名空間的作用

答:

命名空間及其作用

感謝大家觀看!

PPT戳這

今天的分享就到這里啦,歡迎大家點贊、轉(zhuǎn)發(fā)、留言、拍磚~


技能樹.IT修真院

“我們相信人人都可以成為一個工程師,現(xiàn)在開始,找個師兄,帶你入門,掌控自己學(xué)習(xí)的節(jié)奏,學(xué)習(xí)的路上不再迷?!薄?/h2>

這里是技能樹.IT修真院,成千上萬的師兄在這里找到了自己的學(xué)習(xí)路線,學(xué)習(xí)透明化,成長可見化,師兄1對1免費(fèi)指導(dǎo)。快來與我一起學(xué)習(xí)吧~

我的邀請碼:12190840,或者你可以直接點擊此鏈接:http://www.jnshu.com/login/1/12190840

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容