Spring 框架複習筆記
Spring是一個業務層框架。
一.大致介紹(IoC):
(一)什麼是IOC的功能
IoC:控制反轉。將建立物件的許可權交給Spring框架處理。
(二)步驟一:下載Spring開發包。
(三)步驟二:建立專案,將包匯入到專案中。(在學習完maven以後,將Jar座標寫入到pom.xml檔案中即可)。
(四)步驟三:建立對應的包結構:(xxxService<介面>. xxxServiceImpl<介面的實現類>)。
(五)步驟四: 將建立的包結構交給框架管理。
(六)步驟六:建立配置檔案:applicationContext.xml
在配置檔案中填寫約束檔案。然後配置第三步建立的實現類:
注意: 這個地方要填寫實現類(impl )的全路徑名。
(七)步驟五:開始進行整合測試。
測試類建立一個demo1:
首先要建立工廠,載入核心配置檔案:ApplicationContext ac =
new ClassPathXmlApplicationContext(“applicationContext.xml”);
ac.getBean(“xxx”) --> xxx是配置檔案中的
建立介面的物件<好處在與耦合度高>
一: 依賴注入: 在service中注入一個Dao的物件(依賴)
交給Spring容器自動注入。
(1)採用在Application配置檔案中配置:
1) 演示依賴注入
<bean id=”” class=”” > xxx屬性自己配置 </bean>
依賴(Dao層全路徑名)
<bean id=”” class=””>
<property name=”” ref=”” /> (引用Dao層的Id值) 注入xxxServiceImpl中)
</bean>
① Set方法。(pojo中設定set方法)
<bean id=”” class=””>
<property name=”” value=”” />
</bean>
②構造方法的注入:
<bean id=”” class=””>
<constructor-arg name=”” value=”” />
<constructor-arg name=”” value=”” />
</bean>
還可以採用ref引入的方式 引入一個已經配置好的類。
(2)但不採用在配置檔案中配置注入問題, 使用標籤在Dao層次寫入標籤@Repository
在xxxServiceImpl層次寫入@Service(xxxService).然後建立Dao的物件。
(3)單一屬性值的設定:
2) <Bean id=”” class=””>
<property name = “屬性名” value = “屬性值”>
</Bean>
3) <Bean id=”” class=””>
<property name = “屬性名”>
<list>
<value>xxx</value>
</list>
</property>
</Bean>
(此處是list集合 同時也可以是set集合 將list改set即可,)
4) 3) <Bean id=”” class=””>
<property name = “屬性名”>
<map>
<entry key=”” value=”” / >
<entry key=”” value=”” / >
<entry key=”” value=”” / >
<map>
</property>
</Bean>
二: spel表示式的方式(簡單瞭解一下就行)
在注入的value的值中 採用value=”#{xxx}”
Xxx:如果 值是字串的話 加單引號
值的話直接填寫。
可以填寫物件,物件的屬性,物件得方法。
三:依賴注入標籤的簡單概述:
①首先開啟註解掃描;
Context約束下面的標籤:
<context : component-scan base-package=”xxx”> (xxx-->document)
<context : component-scan>
②在XxxServiceImpl 中配置component(); 作用在當前類上。
中間如果不配置value值得就是類名但是首字母小寫。
但是比較原始。 瞭解就好。
③根據component 衍生出來得三個註解。 不同得層次有不同得註解。
Dao層----->Response 持久層 (操作資料庫)
Service層----->Service(value = “”) 業務層 (方法及具體的實現)
Controller層----->Controller(value = “”) WEB層
④ 資料型別的注入:
基本資料型別的注入:在屬性名上面新增@Value (value = “”)
引用型別的注入: @Autowired 按照型別自動裝配
按名稱注入: @Qualifier(value = “”) 根據Service的value進行裝配
注入的缺點在於要兩個一起用:
第一行寫@Autowired 第二行寫@Qualifier
⑤ java提供的一個註解,Spring框架支援。
Resource(name = “”) : 根據名稱裝配
二:大致介紹(AOP)
1) 面向切面的程式設計。
2) 底層原理 JDK動態代理。(簡單說就是介面實現類)
Proxy.NewProxyInstance(xxx.getClass().getClassLoader() -->類的載入器
xxx.getClass().Interfaces() --->介面
New InvocationHandler -->匿名內部類
)
在測試類中拿到代理物件 用代理物件呼叫方法。
代理物件執行的時候。Invoke會執行一次。
3)AOP的術語:
Joinpoint 連線點 簡單來說指的就是方法。
Pointcut 切入點 想對那個方法進行更改,該方法就是切入點。
Advice 通知 攔截以後的通知。具體想做什麼功能。
Target 目標物件 代理的目標物件。(簡單指想要被增強的實現類)。
Proxy 代理 JDK介面代理 和cglib的動態代理。
Aspect 切面 切入點(自己配置)和通知合二為一的東西。
詳解切面的配置xml文件:
①先配置aop(別名)約束.
②再配置切面類<bean id = “” class = “” />
③(1)配置通知。(先打< 觀察一下有不同種類型)
<aop : config>
<aop:aspect ref = “xxx”> 第二步所配置的id值
<aop:xxx mothed = “xxx” pointcut=”xxx”>
不同型別 不同的方法 切入點
切入點---> (execution(piblic *(void..) xxx)) xxx->方法全路徑名
</aop:asoect>
</aop : config>
③(2)通知可以配置的切面類中進行註解的配置;但需要開啟自動代理
<aop:aspectJ-autoproxy / > 開啟自動代理
3) 操作事物:
①PlatformTransactionManager(介面) 平臺事物管理器
兩個介面的實現類:
DateSrouceTransactionManager
HibernateTransactionManager
兩個重要方法commit 和 rollback .
②TransactionDifinition 設定事物的隔離級別.
TransactionStatus 顯示事物的狀態.