大家好,我是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)行配置和代碼編寫。
問:解釋一下命名空間的作用
答:

命名空間及其作用