23-Spring

Sping和一個開源框架,能夠和其餘框架一塊兒使用,解決對象建立以及對象之間依賴關係的一種框架;spring

Spring有7大模塊express

    1:SpringCore編程

    2:SpringDao安全

    3:SrpingROM框架

    4:SpringWebdom

    5:Springcontext函數

    6:SpringAOP性能

    7:SpringWebMvcspa

 

Spring默認是單例的代理

SpringIOC

    SpringIOC容器是Spring的核心內容

    做用:建立對象、處理對象的依賴關係

    SpringIOC的原理:dom4j解析+反射機制

容器建立對象:

 建立對象, 有幾種方式:

    1) 調用無參數構造器

    2) 帶參數構造器

    3) 工廠建立對象

    工廠類,靜態方法建立對象

    工廠類,非靜態方法建立對象

DL(依賴注入)的方式:

    1: 經過構造函數

    2:經過set方法給屬性注入值

    3:p名稱空間

    4:註解

SpringAOP

    面向切面編程

    SpringAOP實現原理:代理模式

    要的功能是:日誌記錄,性能統計,安全控制,事務處理,異常處理等等。

    注意:AOP不是一種技術,其實是編程思想。凡是符合AOP思想的技術,均可以當作是AOP的實現。

Aop,  aspect object programming  面向切面編程
	功能: 讓關注點代碼與業務代碼分離!
關注點,
	重複代碼就叫作關注點;
切面,
	 關注點造成的類,就叫切面(類)!
	 面向切面編程,就是指 對不少功能都有的重複的代碼抽取,再在運行的時候網業務方法上動態植入「切面類代碼」。
切入點,
	執行目標對象方法,動態植入切面代碼。
	能夠經過切入點表達式,指定攔截哪些類的哪些方法; 給指定的類在運行的時候植入切面類代碼。

實現方式:

    1:註解

<aop:aspectj-autoproxy></aop:aspectj-autoproxy>  開啓事物註解權限

4) 使用註解
@Aspect							指定一個類爲切面類		
@Pointcut("execution(* com.itmayiedu.service.UserService.add(..))")  指定切入點表達式

@Before("pointCut_()")				前置通知: 目標方法以前執行
@After("pointCut_()")					後置通知:目標方法以後執行(始終執行)
@AfterReturning("pointCut_()")		    返回後通知: 執行方法結束前執行(異常不執行)
@AfterThrowing("pointCut_()")			異常通知:  出現異常時候執行
@Around("pointCut_()")				環繞通知: 環繞目標方法執行

 

@Component
@Aspect
public class Aop {
	@Before("execution(* com.itmayiedu.service.UserService.add(..))")
	public void begin() {
		System.out.println("前置通知");
	}

	@After("execution(* com.itmayiedu.service.UserService.add(..))")
	public void commit() {
		System.out.println("後置通知");
	}

	@AfterReturning("execution(* com.itmayiedu.service.UserService.add(..))")
	public void afterReturning() {
		System.out.println("運行通知");
	}

	@AfterThrowing("execution(* com.itmayiedu.service.UserService.add(..))")
	public void afterThrowing() {
		System.out.println("異常通知");
	}

	@Around("execution(* com.itmayiedu.service.UserService.add(..))")
	public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
       System.out.println("我是環繞通知-前");
       proceedingJoinPoint.proceed();
       System.out.println("我是環繞通知-後");
	}

}

2:XML

XML方式實現AOP編程

Xml實現aop編程:
	1) 引入jar文件  【aop 相關jar, 4個】
	2) 引入aop名稱空間
	3)aop 配置
		* 配置切面類 (重複執行代碼造成的類)
		* aop配置
			攔截哪些方法 / 攔截到方法後應用通知代碼
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">
	
	<!-- dao 實例 -->
	<bean id="userDao" class="com.itmayiedu.UserDao"></bean>
	<bean id="orderDao" class="com.itmayiedu.OrderDao"></bean>
	
	<!-- 切面類 -->
	<bean id="aop" class="com.itmayiedu.Aop"></bean>
	
	<!-- Aop配置 -->
	<aop:config>
		<!-- 定義一個切入點表達式: 攔截哪些方法 -->
		<aop:pointcut expression="execution(* com.itmayiedu.*.*(..))" id="pt"/>
		<!-- 切面 -->
		<aop:aspect ref="aop">
			<!-- 環繞通知 -->
			<aop:around method="around" pointcut-ref="pt"/>
			<!-- 前置通知: 在目標方法調用前執行 -->
			<aop:before method="begin" pointcut-ref="pt"/>
			<!-- 後置通知: -->
			<aop:after method="after" pointcut-ref="pt"/>
			<!-- 返回後通知 -->
			<aop:after-returning method="afterReturning" pointcut-ref="pt"/>
			<!-- 異常通知 -->
			<aop:after-throwing method="afterThrowing" pointcut-ref="pt"/>
			
		</aop:aspect>
	</aop:config>
</beans>
相關文章
相關標籤/搜索