這裏是修真院後端小課堂,每篇分享文從java
【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴展思考】【更多討論】【參考文獻】程序員
八個方面深度解析後端知識/技能,本篇分享的是:spring
【springIOC註解】後端
【修真院java小課堂】springIOC註解框架
開場語:函數
你們好,我是IT修真院西安分院第4期的學員魯伯良,一枚正直純潔善良的java程序員,今天給你們分享一下,修真院官網java任務一,深度思考中的知識點——springIOC註解編碼
(1)背景介紹:component
註解(Annotation),也叫元數據.一種代碼級別的說明.它是jdk1.5及之後版本引入的一個特性與類,接口,枚舉是在同一個層次.它能夠聲明在包、類、字段、方法、局部變量、方法參數等的前面,用來對元素說明註釋。註解是以「@註解名」在代碼中存在的。xml
(2)知識剖析:對象
元註解
四大元註解
@Retention、@Inherited、@Documented、@Target
@Retention
1.@Retention: 定義註解的保留策略
@Retention(RetentionPolicy.SOURCE) //註解僅存在於源碼中,在class字節碼文件中不包含
@Retention(RetentionPolicy.CLASS) // 默認的保留策略,註解會在class字節碼文件中存在,但運行時沒法得到,
@Retention(RetentionPolicy.RUNTIME) // 註解會在class字節碼文件中存在,在運行時能夠經過反射獲取到
2.@Target用來聲明註解範圍(枚舉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) ///包
3.@Inherited
聲明子類能夠繼承此註解,若是一個類A使用此註解,則類A的子類也繼承此註解
4.@聲明註解可以被javadoc等識別
自定義註解
定義自定義註解使用@interface 關鍵字
public @interface 註解名 {定義體}
一旦在自定義註解裏面定義了成員變量以後,在使用該註解是就應該爲該註解的成員變量指定值
若是隻有一個參數成員,最好把參數名稱設爲"value",後加小括號。
也能夠在自定義註解的成員變量的時候爲其制定初始值,.(默認值),
(3)常見問題:
註解的使用場景
(4)解決方案:
類屬性自動賦值。
驗證對象屬性完整性。
代替配置文件功能,像spring基於註解的配置。
能夠生成文檔,像java代碼註釋中的@see,@param等
(5)編碼實戰:
(6)拓展思考:
spring註解
傳統的Spring作法是使用.xml文件來對bean進行注入或者是配置aop、事物,這麼作有兩個缺點:
一、若是全部的內容都配置在.xml文件中,那麼.xml文件將會十分龐大;若是按需求分開.xml文件,那麼.xml文件又會很是多
二、在開發中在.java文件和.xml文件之間不斷切換,是一件麻煩的事,同時這種思惟上的不連貫也會下降開發的效率
爲了解決這兩個問題,Spring引入了註解,經過」@XXX」的方式,讓註解與Java Bean緊密結合,既大大減小了配置文件的體積,又增長了Java Bean的可讀性與內聚性。
如何使用
再上下文文件中加入以下代碼
掃描
<context:component-scan base-package="包" />
多個包逗號隔開。
經常使用註解
一、@Component
通用通常不推薦使用
二、@Controller
@Controller對應表現層的Bean
三、@ Service
@Service對應的是業務層Bean
四、@ 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)結束語:
今天的分享就到這裏啦,歡迎你們點贊、轉發、留言、拍磚~