1.Spring概述:
Spring 是一個開源框架,為簡化企業(yè)級應(yīng)用開發(fā)而生袋哼。Spring可以是使簡單的 JavaBean 實現(xiàn)以前只有 EJB 才能實現(xiàn)的功能凯沪。 Spring 是一個 IOC 和 AOP 容器框架莱革。
Spring 容器的主要核心是:
控制反轉(zhuǎn)(IOC):
傳統(tǒng)的 java 開發(fā)模式中,當(dāng)需要一個對象時咽袜,我們會自己使用 new 或者 getInstance 等直接
或者間接調(diào)用構(gòu)造方法創(chuàng)建一個對象丸卷。而在 spring 開發(fā)模式中, spring 容器使用了工廠模式為我們創(chuàng)建了所需要的對
象询刹,不需要我們自己創(chuàng)建了谜嫉,直接調(diào)用 spring 提供的對象就可以了,這是控制反轉(zhuǎn)的思想凹联。
依賴注入(DI):
spring 使用 javaBean 對象的 set 方法或者帶參數(shù)的構(gòu)造方法為我們在創(chuàng)建所需對象時將其屬
性自動設(shè)置所需要的值的過程沐兰,就是依賴注入的思想。
面向切面編程(AOP):
在面向?qū)ο缶幊蹋╫op)思想中蔽挠,我們將事物縱向抽成一個個的對象住闯。而在面向切面編程
中,我們將一個個的對象某些類似的方面橫向抽成一個切面澳淑,對這個切面進行一些如權(quán)限控制比原、事物管理,記錄日志等公用操作處理的過程就是面向切面編程的思想杠巡。 AOP 底層是動態(tài)代理量窘,如果是接口采用 JDK 動態(tài)代理,如果是類采用CGLIB 方式實現(xiàn)動態(tài)代理
2.依賴注入
http://www.reibang.com/p/99b03b46c243
3.加載配置文件的三種方式:
ClassPathXmlApplicationContext:
它是從類的根路徑下加載配置文件,推薦使用這種
FileSystemXmlApplicationContext:
它是從磁盤路徑上加載配置文件氢拥,配置文件可以在磁盤的任意位置蚌铜。
AnnotationConfigApplicationContext:
當(dāng)我們使用注解配置容器對象時,需要使用此類來創(chuàng)建 spring 容器嫩海。它用來讀取注解冬殃。
4.常用注解
http://www.reibang.com/p/cb2e1a1d6b4c
5.Spring 整合 Junit
1.拷貝整合 junit 的必備 jar 包到 lib 目錄
此處需要注意的是,導(dǎo)入 jar 包時出革,需要導(dǎo)入一個 spring 中 aop 的 jar 包
2.使用@RunWith 注解替換原有運行器
@RunWith(SpringJUnit4ClassRunner.class)
public class AccountServiceTest {
}
3.使用@ContextConfiguration 指定 spring 配置文件的位置
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations= {"classpath:bean.xml"})
public class AccountServiceTest {
}
@ContextConfiguration 注解:
locations 屬性: 用于指定配置文件的位置造壮。如果是類路徑下渡讼,需要用 classpath:表明
classes 屬性: 用于指定注解的類骂束。當(dāng)不使用 xml 配置時,需要用此屬性指定注解類的位置成箫。
4.使用@Autowired 給測試類中的變量注入數(shù)據(jù)
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations= {"classpath:bean.xml"})
public class AccountServiceTest {
@Autowired
private IAccountService as ;
}
6.AOP
AOP: 全稱是 Aspect Oriented Programming 即: 面向切面編程展箱。
簡單的說它就是把我們程序重復(fù)的代碼抽取出來,在需要執(zhí)行的時候蹬昌,使用動態(tài)代理的技術(shù)混驰,在不修改源碼的
基礎(chǔ)上,對我們的已有方法進行增強。
AOP相關(guān)術(shù)語:
Joinpoint(連接點):
所謂連接點是指那些被攔截到的點栖榨。在 spring 中,這些點指的是方法,因為 spring 只支持方法類型的連接點昆汹。
Pointcut(切入點):
所謂切入點是指我們要對哪些 Joinpoint 進行攔截的定義。
Advice(通知/增強):
所謂通知是指攔截到 Joinpoint 之后所要做的事情就是通知婴栽。通知的類型: 前置通知,后置通知,異常通知,最終通知,環(huán)繞通知满粗。
Introduction(引介):
引介是一種特殊的通知在不修改類代碼的前提下, Introduction可以在運行期為類動態(tài)地添加一些方
法或 Field。
Target(目標(biāo)對象):
代理的目標(biāo)對象愚争。
Weaving(織入):
是指把增強應(yīng)用到目標(biāo)對象來創(chuàng)建新的代理對象的過程映皆。
spring 采用動態(tài)代理織入,而 AspectJ 采用編譯期織入和類裝載期織入轰枝。
Proxy(代理) :
一個類被 AOP 織入增強后捅彻,就產(chǎn)生一個結(jié)果代理類。
Aspect(切面):
是切入點和通知(引介)的結(jié)合鞍陨。