1. 程式人生 > 其它 >大資料 | 理解Spark的核心RDD

大資料 | 理解Spark的核心RDD

spring是一款輕量級的控制反轉和麵向切面程式設計開源框架,

spring核心容器的主要元件是Bean工廠(BeanFactory),Bean工廠使用IOC模式來降低程式程式碼之間的耦合度,並提供了AOP的實現

Spring常用註解(annotion):

1.@Controller:用於標註控制層元件,

2.@Service:用於標註業務層元件,

3.@Component:用於標註這是一個受Spring管理的元件,元件引用名稱是類名,第一個字母小寫。可以使用@Component("beanID")指定元件的名稱

4.@Repository:用於標註資料訪問層元件,即DAO元件

5.@Bean:方法級別的註解,主要用在@Configuration 和 @Component 註解的類裡,

@Bean註解的方法會產生一個Bean物件,該物件有Spring管理並放到IOC容器中。引用名稱是方法名,也可以使用@Bean("beanID")指定元件名

6.@Scope("prototype"):將元件的範圍設定為原型的(即多例)。保證每一個請求有一個單獨的action來處理,避免action的執行緒問題。

由於Spring預設是單例的,只會建立一個action物件,每次訪問都是同一個物件,容易產生併發問題,資料不安全。

7.@Autowired: 預設按型別進行自動裝配。在容器查詢匹配的Bean,當有且只有一個匹配的Bean時,Spring將其注入該註解標註的變數中。

8.@Resource:預設按名稱進行自動裝配,當找不到與名稱匹配的Bean時會按型別裝配。

@Autowired 和 @ Resource 的區別:

@Autowired預設按型別進行自動裝配(屬於Spring),預設情況下要求依賴物件必須存在,如果要允許為null,需設定required屬性為false,@Autowired(required="false"),

如果要使用名稱進行裝配,可以使用與@Qualifier註解一起使用,例如: @Autowired  @Qualifier("adminService")  private  AdminService   adminService;

@Resource預設是按照名稱進行匹配(屬於J2EE),名稱可以通過name屬性來指定。如果沒有指定name屬性,當註解寫在欄位上時,預設取欄位名進行裝配。

當找不到與名稱相匹配的Bean時,會按照型別進行裝配。但是,name屬性一旦指定,就只會按照名稱進行裝配。

 

IOC/DI(控制反轉/依賴注入):當建立物件時,把控制權交給Spring容器 / IOC容器會把當前物件所需要的外部資源動態的注入給我們。

DI主要有四種方式:

1.基於註解注入方式(推薦使用)

2.set注入方式

3.構造器注入方式

4.靜態工廠注入方式

 

AOP(面向切面程式設計):就是縱向的程式設計。例如業務A和業務B現在需要一個相同的操作,傳統方法我們可能需要在業務A、B中都加入相關操作程式碼,

而使用AOP就可以只寫一遍程式碼,業務A、B共用這段程式碼。並且,當業務A、B需要增加新的操作時,可以在不改動原始碼的情況下,靈活新增新的業務邏輯實現。

AOP主要應用於簽名驗證,引數校驗,日誌記錄,事物控制,許可權控制,效能統計,效能統計,異常處理

 

切面(Aspect):共有功能的實現。如日記切面,許可權切面,驗籤切面等。在實際開發中通常是一個存放共有功能實現的標準Java類。

當Java類使用了@Aspect註解修飾時,就能被AOP容器識別為切面

通知(Advice):切面的具體實現。就是要給目標物件織入的事情。以目標方法為參照點,根據放置的地方不同,可分為前置通知(Before),後置通知(AfterReturning)

異常通知(AfterThrowing),最終通知(After)和環繞通知(Around)五種。在實際開發中通常是切面類中的一個方法,具體屬於哪類通知,通過方法上的註解區分。

連線點(JoinPoint):程式在執行過程中能夠插入切面的地點。例如:方法呼叫,異常丟擲等。Spring只支援方法級的連線點,一個類的所有方法前,後,丟擲異常時等都是連線點。

切入點(PointCut):用於定義通知應該切入到哪些連線點上。不同的通知通常需要切入到不同的連線點上,這種精準的匹配是由切入點的正則表示式來定義的。

切入點就是用來定義哪些類裡的哪些方法會得到通知。

目標物件(Target):哪些即將切入切面的物件,也就是被通知的物件。這些物件專注業務本身的邏輯,所有的共有功能等待AOP容器的切入。

代理物件(Proxy):將通知應用到目標物件之後被動態建立的物件。可以簡單地理解為,代理物件的功能等於物件本身業務邏輯加上共有功能。

代理物件對於使用者是透明的,是執行過程中的產物。目標物件被織入共有功能後產生的物件。

織入(Weaving):將切面應用到目標物件從而建立一個新的代理物件的過程。這個過程可以發生在編譯時,類載入時,執行時。

Spring是在執行時完成織入,執行時織入通過Java語言的反射機制與動態代理機制來動態實現。