大家好止状,我是IT修真院上海分院第02期學(xué)員怎顾,一枚正直善良的Java程序員捉撮。
今天給大家分享一下彤断,修真院官網(wǎng)task2任務(wù)中可能會使用到的知識點:
使用Annotation時需要有哪些配置野舶?它的加載過程是怎樣實現(xiàn)的?
undefined_騰訊視頻
1.背景介紹
在編程中宰衙,一直強調(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虛擬機可以完成這些標(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框架中注解的運用也就主要是解決這類問題的诫睬。而框架中另一個核心知識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)擴展功能時祭隔,沒有遵循OCP開發(fā)原則货岭。
(2)配置文件開發(fā)的優(yōu)缺點
優(yōu)點:1)遵循OCP開發(fā)原則路操,修改配置文件即可進(jìn)行功能擴展;2)集中管理對象和對象之間的組合關(guān)系千贯,易于閱讀屯仗。
缺點:1)開發(fā)速度相對較慢;2)編譯時很難檢查出錯誤搔谴,運行中的錯誤很難定位魁袜,調(diào)試難度較大。
如果客戶需求不會頻繁發(fā)生變化敦第。那么使用注解非常好峰弹,開發(fā)效率快。
如果客戶需求經(jīng)常發(fā)生變化芜果,那么采用配置文件的方式會好一些鞠呈。有利于擴展。
5.編碼實戰(zhàn)
6.擴展思考
在使用框架開發(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)行配置和代碼編寫。
問:解釋一下命名空間的作用
答:
命名空間及其作用