一:IoC注解開發
1,在applicationContext.xml中需要引入context約束
2,簡單的注解開發實例
注意:對於要實現的類中的屬性注入,可以不提供該屬性的set方法,如果提供了,將@Value的注解加在set方法上發即可
3,IoC注解詳情
@Component
修飾一個類,將這個類交給Spring管理,有三個衍生注解(功能相似)建議用衍生的三個注解
- @Controller(web 層)
- @Service(service 層)
- @Repository(dao 層)
屬性注入的注解
- @Value(” “)注入普通屬性,並設置屬性的值
- @Autowired 注入對象屬性,根據對象類型來注入,但一般是按照名稱來注入,需要搭配注解@Qualifier(value="名稱”
- @Resource(name="名稱") 根據名稱注入對象屬性,常用
其他注解:
- @PostConstruct 初始化方法
- @PreDestroy 銷毀方法
- @Scope("singleton&prototype&request&session&globalsession") 作用范圍的注解,默認為singleton,單例
4,xml和注解的區別和整合開發
注解與XML配置的區別
注解:是一種分散式的元數據,與源代碼緊綁定。
xml:是一種集中式的元數據,與源代碼無綁定。
詳情:https://www.cnblogs.com/iOS-mt/p/6133656.html
xml和注解的整合開發(了解)
注意:bean管理交給xml,屬性注入交給注解
二,AOP(Aspect Oriented Programming)面向切面編程
參考:http://www.cnblogs.com/xrq730/p/4919025.html
AOP的作用簡單圖示:
1,底層原理為動態代理(反射)
- JDK動態代理:只能對實現了接口的類進行代理
- Cglib動態代理:(類是於Javasist第三方代理技術),可以對沒有實現接口的類實現代理,生成子類對象
2,AOP的相關術語:
- Joinpoint(連接點,可以被增強/切入的方法都可以被稱為連接點)
- Pointcut(切入點,真正被增強的連接點被稱為切入點)
- Advice(通知/增強,增強的相關代碼或方法)
- Introduction(引介,類層面的增強,即向類里直接加入增強的代碼)
- Target(目標,被增強的對象)
- weaving(織入,將Advice引入到Target的過程)
- Proxy(代理,通過AOP織入后的類)
- Aspect(切面,多個通知和多個切入點的組合)
注意:切入點可以是一個包下的單個類的單個方法,也可以是一個或多個包下的多個類的多個方法,需要靈活配置
3,基於aspectJ的aop的xml開發簡單入門
1)引入相應的jar包
2)在配置文件中引入aop的schema約束
3)編寫目標類
4)編寫切面類
5)xml的配置
4,advice(通知)類型
1)前置通知
僅能獲取到切入點信息(所有類型的通知都可以獲取)
2)后置通知
能夠獲取切入點的返回值
3)環繞通知
在切入點的前后都執行相關的增強代碼,可以阻止切入點的執行(如對切入點進行事務處理)
4)異常通知
當所應用/通知的切入點,運行異常時,會執行異常通知,也可以對異常拋出
5)最終通知
無論切入點是否有異常,最終通知的代碼都會執行
5,切入點表達式
execution([訪問修飾符] 訪問返回值類型 包名.類名.方法名(參數))
訪問修飾符可以省略,訪問返回值類型可以用 * 代替,表示任意類型,參數 .. 代替,表示任意參數 用 * 可以靈活配置切入點
例: * *.*.*(..) 表示任意包的的所有類下的說有方法配置為一個切入點
* com.test.dao.UserDao+.save(..) 表示UserDao類及其子類的save方法配置為一個切入點