Spring框架 基礎知識 (筆記)

1、spring是什麼?
spring是一個輕量級的企業級應用開發的框架,spring的核心是控制反轉(IOC)、面向切面編程(AOP)和依賴注入
2、spring入門程序
(1)導入jar
spring的核心配置文件 applicationContext.xml(默認)
作用:用戶配置所有的類(對象),這些類可以成爲springBean
(2)核心類
ApplicationContext(接口):創建或者獲取springBean
3、IOC控制反轉
控制反轉Inversion of Controll :把對象的創建、初始化、銷燬等工作交給spring容器,讓spring容器來管理這些對象的生命週期
IOC不是一種技術,而是一種面向對象編程的思想,可以設計出鬆耦合度、優良的程序
包括:依賴注入DI(核心)依賴查找
4、spring的注入
當實例化某個對象的時候,由外部容器來設置這個對象的屬性值
屬性值的注入,一定要有對應的set方法
property:當前配置的類的屬性
name: 屬性的名字 value:注入的值
ref:指向其他bean的id
5、Bean的作用域
作用域 scope
默認爲singleton :單例模式。只有一份實例
prototype:原型模式。每次通過spring容器來獲取springbean時,容器都會創建一個新的實例進行返回
request:同一請求是同一個實例
session:同一會話是同一個實例
6、spring的裝配方式
基於XML配置文件的註解方式
(1)必須有setter方法
(2)必須有無參構造方法
基於註解的裝配方式(常用方式)
把當前註解的類聲明爲springbean,默認名字爲首字母小寫的全拼
相當於
@Component 用於管理註解的通用模式
@Repository 用於持久層,表示當前是持久層
@Service 用於服務層,表示當前是服務層
@Controller 用於控制層,表示當前是控制層
@Autowired 通過類型查找匹配,注入屬性,回到spring的bean去根據當前配置的對象的類型去查找。侷限性:不能有多餘一個的實現類
掃描包:
<context:component-scan base-package=“cn.*”></context:component-scan>

7、AOP
開發時,核心業務代碼與系統服務代碼是相對獨立的。運行時核心業務執行時,擁有系統服務的功能。實現這種效果的技術就是AOP
AOP:面向切面編程,採用的是橫向抽取機制,將分散在各個方法上的重複代碼提取出來,然後在程序編譯或者是運行時,再將這些提取出來的代碼運用到需要執行的地方
AOP的本質就是代理。對方法進行增強
JDK的動態代理  基於接口的
CGLIB代理  基於子類的
8、spring AOP面向接口編程
Advice(通知):AOP在特定切點上執行的增強處理。在什麼時間點上進行的增強,在方法執行之前?執行之後?拋出異常後?
Pointcut(切點):對那些類、那些方法進行增強。

Aspect切面:通常是一個類,裏面定義了通知和切點
AOP = 通知+切點
通知的類型
前通知:方法執行之前
後通知:方法執行以後
返回後通知:成功返回後
異常通知:發生異常後的通知
環繞通知:在方法的執行前後進行增強
PointCut切點
JDKRegexpPatternPointCut 基於正則表達式的切點
AspectJExpressionPointCut 基於AOP的切點表達式

AspectJ開發
配置文件的方式


配置通知類

aop:config
定義切面
<aop:aspect ref=“myAdvice”>
定義一個切點使用AspectJ切點表達式 execution(返回類型 方法路徑)
:代表任意類型或是類上的所有
“…”:代表任意多個,0~N個都可以
括號前面代表的是方法名
execution( cn..(…)):返回值類型是任意類型的。cn包下的所有類,不包括子包下的。任意方法,任意參數
<aop:pointcut expression=“execution(* cn.bean.User.*())”
id = “cut1”/>
配置前通知 method:增強執行的方法
<aop:before method=“doBefore” pointcut-ref=“cut1”/>
後通知,又稱爲最終通知,無論如何都會執行
<aop:after method=“doAfter” pointcut-ref=“cut1”/>
返回後通知,只有正常返回才執行
<aop:after-returning method=“returnAfter” pointcut-ref=“cut1”/>
異常通知,只有異常拋出時纔會執行
<aop:after-throwing method=“doThrow” pointcut-ref=“cut1”/>
環繞通知:在方法的執行前後進行一些增強
= 前通知+返回後通知
<aop:around method=“around” pointcut-ref=“cut1”/>
</aop:aspect>
</aop:config>
spring 和 mybatis整合
整合思想:
mybatis:持久層框架、只進行JDBC的操作
spring:容器,管理類的,並且可以設計爲scope爲單例。管理會話工廠,聲明爲springbean ,spring來代理mapper接口的實現類,生命爲springbean
會話工廠SqlSessionFactory,特點:一旦創建就一直存在。設置爲單例。
mapper動態代理的方式,
<?xml version="1.0" encoding="UTF-8"?>

讀取外部資源文件
<context:property-placeholder location=“classpath:db.properties”>
需要配置的信息 1、會話工廠 2、mapper代理bean 3、數據庫連接池
配置數據庫連接池

 

 


配置會話工廠

注入數據源

加載mybatis的全局配置文件

批量起別名


配置mapper代理bean,使用包掃描的方式,批量創建mapper的代理bean。 並且bean的名字就是接口的名字,首字母小寫

指定mapper接口所在的包路徑


註解掃描
<context:component-scan base-package=“com.hpe.service.*”></context:component-scan>

spring的聲明式事務
xml配置文件方式
spring事務管理的配置
事務管理器 spring的聲明式事務

注入數據源


事務的通知
<tx:advice id=“txadvice” transaction-manager=“transactionManager”>
tx:attributes
需要切的方法
propagation=“REQUIRED”:默認值,當前方法必須運行在一個事務中,如果當前沒有事務,則會開啓一個新的事務,如果有,則直接使用當前的事務
propagation=“SUPPORTS”:當前方法如果運行在事務中,則使用當前的事務;如果當前沒有事務,則不使用事務
<tx:method name="" propagation=“REQUIRED”/>
<tx:method name="select" propagation=“SUPPORTS”/>
</tx:attributes>
</tx:advice>
AOP的事務管理
aop:config
切點
<aop:pointcut expression=“execution(* com.hpe.service….(…))” id=“cut1”/>
<aop:advisor advice-ref=“txadvice” pointcut-ref=“cut1”/>
</aop:config>

註解事務
開啓註解事務
<tx:annotation-driven transaction-manager=“transactionManager”/>
@Transactional 可以註解到方法上,表示當前方法進事務管理
註解到類上,表示當前類所有的方法都進行事務管理
注意:spring的事務管理,一定要對進行事務管理的地方往外拋異常,而不能try…catch,如果想主動地對事務進行回滾,可以往外拋異常throw new RuntimeException()。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章