springIOC註解
這裡是修真院後端小課堂,每篇分享文從
【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴充套件思考】【更多討論】【參考文獻】
八個方面深度解析後端知識/技能,本篇分享的是:
【springIOC註解】
【修真院java小課堂】springIOC註解
開場語:
大家好,我是IT修真院西安分院第4期的學員魯伯良,一枚正直純潔善良的java程式設計師,今天給大家分享一下,修真院官網java任務一,深度思考中的知識點——springIOC註解
(1)背景介紹:
註解(Annotation),也叫元資料.一種程式碼級別的說明.它是jdk1.5及以後版本引入的一個特性與類,介面,列舉是在同一個層次.它可以宣告在包、類、欄位、方法、區域性變數、方法引數等的前面,用來對元素說明註釋。註解是以“@註解名”在程式碼中存在的。
(2)知識剖析:
元註解
四大元註解
@Retention、@Inherited、@Documented、@Target
@Retention
[email protected]: 定義註解的保留策略
@Retention(RetentionPolicy.SOURCE) //註解僅存在於原始碼中,在class位元組碼檔案中不包含
@Retention(RetentionPolicy.CLASS) // 預設的保留策略,註解會在class位元組碼檔案中存在,但執行時無法獲得,
@Retention(RetentionPolicy.RUNTIME) // 註解會在class位元組碼檔案中存在,在執行時可以通過反射獲取到
[email protected]arget用來宣告註解範圍(列舉ElementType),ElementType可選值:
原始碼為:
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
ElementType[] value();
}
@Target(ElementType.TYPE) //介面、類、列舉、註解
@Target(ElementType.FIELD) //欄位、列舉的常量
@Target(ElementType.METHOD) //方法
@Target(ElementType.PARAMETER) //方法引數
@Target(ElementType.CONSTRUCTOR) //建構函式
@Target(ElementType.LOCAL_VARIABLE)//區域性變數
@Target(ElementType.ANNOTATION_TYPE)//註解
@Target(ElementType.PACKAGE) ///包
宣告子類可以繼承此註解,如果一個類A使用此註解,則類A的子類也繼承此註解
[email protected]宣告註解能夠被javadoc等識別
自定義註解
定義自定義註解使用@interface 關鍵字
public @interface 註解名 {定義體}
一旦在自定義註解裡面定義了成員變數之後,在使用該註解是就應該為該註解的成員變數指定值
如果只有一個引數成員,最好把引數名稱設為"value",後加小括號。
也可以在自定義註解的成員變數的時候為其制定初始值,.(預設值),
(3)常見問題:
註解的使用場景
(4)解決方案:
-
類屬性自動賦值。
-
驗證物件屬性完整性。
-
代替配置檔案功能,像spring基於註解的配置。
-
可以生成文件,像java程式碼註釋中的@see,@param等
(5)編碼實戰:
(6)拓展思考:
spring註解
傳統的Spring做法是使用.xml檔案來對bean進行注入或者是配置aop、事物,這麼做有兩個缺點:
1、如果所有的內容都配置在.xml檔案中,那麼.xml檔案將會十分龐大;如果按需求分開.xml檔案,那麼.xml檔案又會非常多
2、在開發中在.java檔案和.xml檔案之間不斷切換,是一件麻煩的事,同時這種思維上的不連貫也會降低開發的效率
為了解決這兩個問題,Spring引入了註解,通過”@XXX”的方式,讓註解與Java Bean緊密結合,既大大減少了配置檔案的體積,又增加了Java Bean的可讀性與內聚性。
如何使用
再上下文檔案中加入如下程式碼
掃描
<context:component-scan base-package="包" />
多個包逗號隔開。
常用註解
1、@Component
通用一般不推薦使用
2、@Controller
@Controller對應表現層的Bean
3、@ Service
@Service對應的是業務層Bean
4、@ Repository
@Repository對應資料訪問層Bean
@Controller, @Service, @Component, @Repository
刨析
其中@Component是一種通用名稱,泛指任意可以通過Spring來管理的元件,@Controller, @Service, @Repository則是一種特定的元件,通常用來表示某種特定場合下的元件,比如@Repository用來表示倉庫(資料層,DAO),並且Spring 框架會根據這種應用場景做些定製,比如@Repository同時具備了自動化的異常轉換。類似的, @Service則用來表示服務層相關的類, @Controller則用來表示展示層(presentation)的類。
(7)參考文獻:
網際網路
(8)更多討論:
Q1::spring註解為什麼要分層
A1::所有這些分層方式都是為了解決應用從小專案成長為大專案時可能遇到的隱患,代價是在專案還小時,增加了專案的複雜度,往往一句程式碼就能搞定的事情,卻要拆到三個類中去。但是太多的實際例子表
Q2:@Compoent註解是可以通用的是嗎?
A2:是的,不過為了層次分明我們不推薦這樣使用?
Q3:什麼情況下會用到自定義註解?
A3:自定義註解可以代替掉實體類的get set方法,驗證物件的屬性完整性.
(9)鳴謝:
(10)結束語:
今天的分享就到這裡啦,歡迎大家點贊、轉發、留言、拍磚~
更多內容,可以加入IT交流群565734203與大家一起討論交流
這裡是技能樹·IT修真院:https://www.jnshu.com,初學者轉行到網際網路的聚集地