javascript
Spring整理
Spring概念
?
1 spring是開源的輕量級框架
?
2 spring核心主要兩部分:
(1)aop:面向切面編程,擴展功能不是修改源代碼實現
(2)ioc:控制反轉,
- 比如有一個類,在類里面有方法(不是靜態的方法),調用類里面的方法,創建類的對象,使用對象調用方法,創建類對象的過程,需要new出來對象
- 把對象的創建不是通過new方式實現,而是交給spring配置創建類對象
?
3 spring是一站式框架
(1)spring在javaee三層結構中,每一層都提供不同的解決技術
- web層:springMVC
- service層:spring的ioc
- dao層:spring的jdbcTemplate
?
Spring的ioc操作
? ?
1 把對象的創建交給spring進行管理
2 ioc操作兩部分:
(1)ioc的配置文件方式
(2)ioc的注解方式
?
IOC底層原理
1 ioc底層原理使用技術
(1)xml配置文件
(2)dom4j解決xml
(3)工廠設計模式
(4)反射
?
IOC入門案例
1.創建類,在類里面創建方法
?
2.創建spring配置文件,配置創建類
(1)spring核心配置文件名稱和位置不是固定的
- 建議放到src下面,官方建議applicationContext.xml
(2)引入schema約束
(3)配置對象創建
<bean id="user" class="com.gifthouse.ioc.User"><!-- collaborators and configuration for this bean go here --></bean>3.?寫代碼測試對象創建
(1)這段代碼在測試中使用
此時會在控制臺中會看到打印的日志。
?
Spring的bean管理(xml方式)
Bean實例化的方式
1 在spring里面通過配置文件創建對象
?
2 bean實例化三種方式實現
第一種 使用類的無參數構造創建(重點)
類里面沒有無參數的構造,出現異常
第二種 使用靜態工廠創建
(1)創建靜態的方法,返回類對象
??
第三種 使用實例工廠創建
(1)創建不是靜態的方法,返回類對象
?
Bean標簽常用屬性
(1)id屬性:起名稱,id屬性值名稱任意命名
- id屬性值,不能包含特殊符號
- 根據id值得到配置對象
(2)class屬性:創建對象所在類的全路徑
(3)name屬性:功能和id屬性一樣的,id屬性值不能包含特殊符號,但是在name屬性值里面可以包含特殊符號
(4)scope屬性
- singleton:默認值,單例
- request:創建對象把對象放到request域里面
- session:創建對象把對象放到session域里面
- globalSession:創建對象把對象放到globalSession里面
?
屬性注入介紹
1 創建對象時候,向類里面屬性里面設置值
?
2 屬性注入的方式介紹(三種方式)
(1)使用set方法注入
(2)使用有參數構造注入
(3)使用接口注入
?
?
3 在spring框架里面,支持前兩種方式
(1)set方法注入(重點)
(2)有參數構造注入
?
使用有參數構造注入屬性
?
使用set方法注入屬性(重點)
?
?
注入對象類型屬性(重點)
1 創建service類和dao類
(1)在service得到dao對象
2 具體實現過程
(1)在service里面把dao作為類型屬性
(2)生成dao類型屬性的set方法
?
(3)配置文件中注入關系
IOC和DI區別
(1)IOC: 控制反轉,把對象創建交給spring進行配置
(2)DI: 依賴注入,向類里面的屬性中設置值
(3)關系:依賴注入不能單獨存在,需要在ioc基礎之上完成操作
?
?
Spring整合web項目原理
?
?
1 加載spring核心配置文件
(1)new對象,功能可以實現,效率很低
2 實現思想:把加載配置文件和創建對象過程,在服務器啟動時候完成
3 實現原理
(1)ServletContext對象
(2)監聽器
?
(3)具體使用:
- 在服務器啟動時候,為每個項目創建一個ServletContext對象
- 在ServletContext對象創建時候,使用監聽器可以具體到ServletContext對象在什么時候創建
- 使用監聽器監聽到ServletContext對象創建時候
-- 加載spring配置文件,把配置文件配置對象創建
-- 把創建出來的對象放到ServletContext域對象里面(setAttribute方法)
- 獲取對象時候,到ServletContext域得到 (getAttribute方法)
?
Spring的bean管理(注解)
注解介紹
1 代碼里面特殊標記,使用注解可以完成功能
2 注解寫法 @注解名稱(屬性名稱=屬性值)
3 注解使用在類上面,方法上面 和 屬性上面
Spring注解開發準備
1 導入jar包
(1)導入基本的jar包
(2)導入aop的jar包
2 創建類,創建方法
3 創建spring配置文件,引入約束
(1)第一天做ioc基本功能,引入約束beans
(2)做spring的ioc注解開發,引入新的約束
4 開啟注解掃描
注解創建對象
1 在創建對象的類上面使用注解實現
2 創建對象有四個注解
?
(1)@Component
(2)@Controller
(3)@Service
(4)@Repository
目前這四個注解功能是一樣的,都創建對象
?
3 創建對象單實例還是多實例
?
注解注入屬性
1 創建service類,創建dao類,在service得到dao對象
注入屬性第一個注解 @Autowired
(1)創建dao和service對象
(2)在service類里面定義dao類型屬性
注入屬性第二個注解 @Resource
?
配置文件和注解混合使用
1 創建對象操作使用配置文件方式實現
2 注入屬性的操作使用注解方式實現
?
AOP概念
1 aop:面向切面(方面)編程,擴展功能不修改源代碼實現
?
2 ?AOP采取橫向抽取機制,取代了傳統縱向繼承體系重復性代碼
?
3 aop底層使用動態代理實現
(1)第一種情況,有接口情況,使用動態代理創建接口實現類代理對象
(2)第二種情況,沒有接口情況,使用動態代理創建類的子類代理對象
?
AOP原理
?
AOP操作術語
Joinpoint(連接點): 類里面可以被增強的方法,這些方法稱為連接點
?
Pointcut(切入點):所謂切入點是指我們要對哪些Joinpoint進行攔截的定義.
?
Advice(通知/增強):所謂通知是指攔截到Joinpoint之后所要做的事情就是通知.通知分為前置通知,后置通知,異常通知,最終通知,環繞通知(切面要完成的功能)
Aspect(切面): 是切入點和通知(引介)的結合
Introduction(引介): 引介是一種特殊的通知在不修改類代碼的前提下, Introduction可以在運行期為類動態地添加一些方法或Field.
Target(目標對象): 代理的目標對象(要增強的類)
Weaving(織入): 是把增強應用到目標的過程.
????????? 把advice 應用到 target的過程
Proxy(代理): 一個類被AOP織入增強后,就產生一個結果代理類
?
?
Spring的aop操作
1 在spring里面進行aop操作,使用aspectj實現
(1)aspectj不是spring一部分,和spring一起使用進行aop操作
(2)Spring2.0以后新增了對AspectJ支持
?
2 使用aspectj實現aop有兩種方式
(1)基于aspectj的xml配置
(2)基于aspectj的注解方式
使用表達式配置切入點
1 切入點:實際增強的方法
2 常用的表達式
execution(<訪問修飾符>?<返回類型><方法名>(<參數>)<異常>)
(1)execution(* cn.itcast.aop.Book.add(..))
(2)execution(* cn.itcast.aop.Book.*(..))
(3)execution(* *.*(..))
(4) 匹配所有save開頭的方法 execution(* save*(..))
?
?
Aspectj的aop操作
?
?
Spring整合web項目演示
1 演示問題
(1)action調用service,service調用dao
每次訪問action時候,都會加載spring配置文件
?
2 解決方案:
(1)在服務器啟動時候,創建對象加載配置文件
(2)底層使用監聽器、ServletContext對象
3 在spring里面不需要我們自己寫代碼實現,幫封裝
(1)封裝了一個監聽器,只需要 配置監聽器 就可以了
(2)配置監聽器之前做事情:導入spring整合web項目jar包
?
??基于aspectj的注解aop
1 使用注解方式實現aop操作
第一步 創建對象
第二步 在spring核心配置文件中,開啟aop操作
第三步 在增強類上面使用注解完成aop操作
?
Spring的事務管理
事務概念
1 什么事務
2 事務特性
3 不考慮隔離性產生讀問題
4 解決讀問題
(1)設置隔離級別
?
Spring事務管理api
1 spring事務管理兩種方式
第一種 編程式事務管理(不用)
第二種 聲明式事務管理
2 spring事務管理的api介紹
聲明式事務管理(注解)
第一步 配置事務管理器
第二步 配置事務注解
第三步 在要使用事務的方法所在類上面添加注解
?
?
總結
- 上一篇: Android Architecture
- 下一篇: IDEA 系列安装资料及教程