1.建立專案springaop1
2.匯入需要的包
建立dao層實現userdaoimpl
package com.hp.dao.impl;
import com.hp.dao.iuserdao;
public class userdaoimpl implements iuserdao
else
return 0;
} @override
public int div(int a, int b)
}
4.建立通知類及要執行的通知方法logadvice
package com.hp.advice;
import org.aspectj.lang.joinpoint;
public class logadvice }
public void after(joinpoint jp)
public void afterreturning(object res) throws throwable
public void afterthrowing(exception ex)
}
<?xml version="1.0" encoding="utf-8"?>
6.寫測試類maintest
package com.hp.test;
import org.junit.test;
import com.hp.dao.iuserdao;
public class maintest
}
7.執行結果:
前置通知
將要執行:login方法
引數列表:
admin
123登入成功
login方法執行結束
後置通知
返回值:1
返回通知
-------------
前置通知
將要執行:div方法
引數列表:10
div方法執行結束
後置通知
異常資訊:/ by zero
分母不能為0
8.專案結構:
1.建立專案springaop2
2.匯入需要的包(同上)
3.建立dao層介面iuserdao
package com.hp.dao;
public inte***ce iuserdao
建立dao層實現userdaoimpl
package com.hp.dao.impl;
import org.springframework.stereotype.repository;
import com.hp.dao.iuserdao;
@repository("iuserdao")
public class userdaoimpl implements iuserdao
else
return 0;
} @override
public int div(int a, int b)
}
4.建立通知類及要執行的通知方法logadvice
package com.hp.advice;
import org.aspectj.lang.joinpoint;
import org.aspectj.lang.annotation.after;
import org.aspectj.lang.annotation.afterreturning;
import org.aspectj.lang.annotation.afterthrowing;
import org.aspectj.lang.annotation.aspect;
import org.aspectj.lang.annotation.before;
import org.aspectj.lang.annotation.pointcut;
import org.springframework.stereotype.component;
@aspect
@component //(把普通pojo例項化到spring容器中,相當於配置檔案中的)
public class logadvice //宣告乙個切入點,anymethod為切入點名稱
@before("anymethod()")
public void before(joinpoint jp)
} @after("anymethod()")
public void after(joinpoint jp)
@afterreturning(pointcut ="anymethod()", returning="res")
public void afterreturning(object res) throws throwable
@afterthrowing(pointcut = "anymethod()", throwing="ex")
public void afterthrowing(exception ex)
}
<?xml version="1.0" encoding="utf-8"?>
6.寫測試類maintest
package com.hp.test;
import org.junit.test;
import com.hp.dao.iuserdao;
public class maintest
}
7.執行結果:前置通知
將要執行:login方法
引數列表:
admin
123登入成功
login方法執行結束
後置通知
返回值:1
返回通知
-------------
前置通知
將要執行:div方法
引數列表:10
div方法執行結束
後置通知
異常資訊:/ by zero
分母不能為0
8.專案結構:
1. 在返回通知中,如何獲取返回值?
xml中
advice中傳遞乙個object型別的res引數
2. 在異常通知中,如何獲取出現的異常?
xml:
advice中傳遞乙個exception型別的ex引數
advice中ex.getmessage()
3. 當異常出現時,返回通知和後置通知還會執行嗎?
返回通知不會執行,後置通知會執行
4. 當後置通知與返回通知同時存在時,哪乙個先執行呢?
執行順序按照在xml配置檔案中的配置順序執行
1. 使用註解時,需要在xml配置檔案中新增
2. @ component註解,相當於配置檔案中的,
3. @ pointcut註解,相當於配置檔案中的,
4. @ aspect註解,相當於配置檔案中的,
5. @ before註解,相當於配置檔案中的.after afterrunning afterthrowing around
注:異常通知,比較常用, 我們在編寫dao層和service層時,可以完全不作異常處理,而且建立乙個專門的異常通知切面,由這個異常處理通知類專門負責處理各種異常。
Spring面向切面程式設計
1 面向切面程式設計 aop 的概念 把專案中需要在多處用到的功能,比如日誌 安全和事物等集中到乙個類中處理,而不用在每個需要用到該功能的地方顯式呼叫。2 術語解釋 橫切關注點 分布應用於多處的功能 切面 橫切關注點可以被模組化為乙個類,這個類被稱為乙個切面 通知 advice 切面要完成的工作。s...
Spring的面向切面AOP
aop 面向切面 通知 advice 在什麼時機呼叫該方法 spring提供了5種通知 切點 pointcut 標註需要使用到該通知的方法的位置 切面 aspect 是通知與切點的結合 spring提供了4種各具特色的aop支援 基於 的經典aop aspectj註解驅動的切面 純pojo切面 注入...
Spring面向切面程式設計AOP(around)
詳細分析spring aop實現的jdk aop,與cglib實現aop 1 採用注釋注入的方式 配置檔案 表示使用cglib動態 技術織入增強 編寫 import org.aspectj.lang.proceedingjoinpoint import org.aspectj.lang.annota...