javascript
Spring AOP编程-aspectJ通知类型-6大通知
1、創(chuàng)建目標(biāo)類(target)
public interface IUserService {public void add();public void update();public String del();public void search(); } public class UserServiceImpl implements IUserService {@Overridepublic void add() {System.out.println("userService add...");}@Overridepublic void update() {System.out.println("userService update...");}@Overridepublic String del() {System.out.println(10 / 0); // 一定會(huì)拋出異常System.out.println("userService del...");return "hello world";}@Overridepublic void search() {System.out.println("userService search...");}}2、創(chuàng)建通知:在aspectj中它的增強(qiáng)可以不實(shí)現(xiàn)任何接口,只需要定義出增強(qiáng)功能(方法)
//advice 通知 public class UserServiceHelper {// 前置通知public void before(JoinPoint jp) {System.out.println("攔截的目標(biāo)類:" + jp.getSignature().getDeclaringTypeName());System.out.println("攔截的方法名稱:" + jp.getSignature().getName());System.out.println("前置通知");}// 前置通知public void before1() {System.out.println("前置通知");}// 后置通知public void afterReturning(JoinPoint jp, Object val) {System.out.println("目標(biāo)方法返回值:" + val);System.out.println("后置通知");}// 環(huán)繞通知public Object around(ProceedingJoinPoint pjp) throws Throwable {System.out.println("環(huán)繞前....");Object value = pjp.proceed(); // 執(zhí)行目標(biāo)行為System.out.println("環(huán)繞后....");return value;}// 異常拋出通知public void afterThrowing(JoinPoint jp,Throwable ex) {System.out.println("發(fā)現(xiàn)了異常。。。。"+ex);}// 最終通知public void after(JoinPoint jp) {System.out.println(jp.getSignature().getName());System.out.println("最終通知");} }3、在spring的配置文件中配置信息
< aop:config>下的< aop:aspect>是aspectJ框架用來聲明切面的。
異常通知:目標(biāo)行為只有拋出了異常后才會(huì)執(zhí)行這個(gè)增強(qiáng)方法
最終通知:無論是否有異常,最終通知都會(huì)執(zhí)行.
aspectJ通知上的參數(shù)介紹
在前置通知上可以添加JoinPoint參數(shù),通過它可以獲取目標(biāo)相關(guān)的信息。
使用前置通知可以完成日志記錄,權(quán)限控制.
在后置通知上添加的第二個(gè)參數(shù)val可以獲取目標(biāo)方法的返回值.同時(shí)需要在配置文件中配置。
環(huán)繞通知上的參數(shù)。環(huán)繞通知是我們開發(fā)中應(yīng)用最多的,可以完成日志操作,權(quán)限操作,性能監(jiān)控,事務(wù)管理。
拋出異常通知上的第二個(gè)參數(shù)Throwable它是用于接收拋出的異常
注意:需要在配置文件中聲明。
最終通知上的參數(shù):可以使用最終通知完成資源釋放。
總結(jié)
以上是生活随笔為你收集整理的Spring AOP编程-aspectJ通知类型-6大通知的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring AOP编程-传统AOP开发
- 下一篇: Spring AOP编程-aspectJ