AOP 术语

  • Aspect :日志,安全等功能
  • Join point:函数执行或者属性访问
  • Advice:在某个函数执行点上执行的切面功能
  • Pointcut:匹配横切目标函数的表达式

Advice类型

  • Before : 函数执行之前
  • After returning : 函数正常返回之后
  • After throwing : 函数抛出异常之后
  • After finally : 函数返回之后
  • Around : 函数执行前后

AOP目的:
非完整AOP实现
主目标:整合AOP与IoC

AOP使用

定义Aspectj (日志,安全等功能)

导入AOP要用到的包到 pom.xml 并且在 applicationContext.xml 文件定义如下:

 xmlns:aop="http://www.springframework.org/schema/aop"
 http://www.springframework.org/schema/aop       
 http://www.springframework.org/schema/aop/spring-aop.xsd
package cn.Controller;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;

@Aspect
public class LoggingAspect {
 
}
  <bean id="loggingAspect" class="cn.Controller.LoggingAspect"></bean>
定义Pointcut (匹配横切目标函数的表达式)
 @Before("execution(* cn.Controller.Calculate.*(..))")

-Pointcut表达式

execution(modifiers ? return-type declaring-type? name(param) throws?)

  • 修饰符匹配(modifiers?)
  • 返回值匹配(ret-type)可以为*表示任何返回值,全路径的类名等
  • 类路径匹配(declaring-type?)
  • 方法名匹配(name-param)可以指定方法名 或者 * 代表所有, set 代表以set开头的所有方法
  • 参数匹配((param-pattern))可以指定具体的参数类型,多个参数间用“,”隔开,各个参数也可以用“”来表示匹配任意类型的参数,如(String)表示匹配一个String参数的方法;(,String) 表示匹配有两个参数的方法,第一个参数可以是任意类型,而第二个参数是String类型;可以用(…)表示零个或多个任意参数
  • 异常类型匹配(throws-pattern?)
  • 其中后面跟着“?”的是可选项

例:

  • 所有public函数
execution(public * * (..))
private void publicMethod()
  • 所有以save开头的函数
execution(save * * (..))
private void saveMethod()
  • 所有以save开头的public函数
execution(publicMethod()&&saveMethod)
private void publicSaveMethod()

定义Advice

  • 函数返回之前
@Before("com.netease.course.LoggingAspect.arithmetic()")
public void doLog(){
}

@Before("execution(* com.netease.course.Caculator.*(..))")
public void doLog(){
}
  • 函数返回之后
@AfterReturning("com.netease.course.LoggingAspect.arithmetic()")
public void doLog(){
}
  • 函数抛出异常之后
@AfterThrowing("com.netease.course.LoggingAspect.arithmetic()")
public void doLog(){
}
  • 函数返回值之后
@After("com.netease.course.LoggingAspect.arithmetic()")
public void doLog(){
}

函数上下文信息

函数内定义参数 :JoinPoint jp (Object 类型 )@Before

@Aroud ProceedingJoinPoint pjp (具体执行)

  • 返回值处理
@AfterReturning(
	pointcut="com.netease.course.LoggingAspect.arithmetic()",
	returning="retVal")
public void doLog(Object retVal){   //进行返回值处理
}
  • 异常处理
@AfterReturning(
	pointcut="com.netease.course.LoggingAspect.arithmetic()",
	throwing="ex")
public void doLog(Object retVal){   //进行返回值处理
}
  • 目标参数返回
@Before("com.netease.course.LoggingAspect.arithmetic() && args(a,..)")
public void doLog(JoinPoint jp,int a){
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值