重拾Java之spring之aspectj框架

首先配置依赖
在这里插入图片描述
2.创建接口与实现类
在这里插入图片描述
在这里插入图片描述
3.创建切面类。方法是在类的上面加上@aspect.
这里用到的是@before:前置通知注解。
属性 value是切入点表达式,是切入点切入的位置
位置:在方法的上面
特点:目标方法之前执行,不会改变目标方法的执行,不会改变目标方法的执行结果
要加强一个还是多个方法要看execution后面的东西是一个还是带正则表达式
例如:execution(public * (…))
指定切入点为任意切入方法
execution(
set*(…))
指定切入点为任意一个以set开始的方法
下面是execution的几种写法:
@Before(value = “execution(public void com.zixue.ba01.someserviceImpl.doSome(String,Integer))”)
public void Mybefore(){
切面要执行的代码功能
System.out.println(“前置通知,切面功能:在目标方法之前输出执行时间:”+new Date());

@Before(value = “execution(void com.zixue.ba01.someserviceImpl.doSome(String,Integer))”)
public void Mybefore(){
切面要执行的代码功能
System.out.println(“1===前置通知,切面功能:在目标方法之前输出执行时间:”+new Date());}

@Before(value = “execution(* …someserviceImpl.do(…))”)
public void Mybefore(){
切面要执行的代码功能
System.out.println(“2===前置通知,切面功能:在目标方法之前输出执行时间:”+new Date());}

@Before(value = “execution(* do*(…))”)
public void Mybefore2(){
切面要执行的代码功能
System.out.println(“3===前置通知,切面功能:在目标方法之前输出执行时间:”+new Date());}

execution中还有一个JoinPoint参数。指定通知方法中的参数:JoinPoint(JoinPoint首字母大写)。JoinPoint代表业务方法,要加入切面功能的业务方法。可以再通知方法中获取方法的信息,例如方法名称,方法实参。如果切面方法中需要用到方法的信息,就加入JoinPoint。joinpoint参数的值是由框架赋予的,必须是第一个位置参数。
在这里插入图片描述
4.由spring容器代理创建对象
在这里插入图片描述
5.创建测试类
在这里插入图片描述
2)@AfterReturning
属性:value 切入点表达式
returing 自定义的变量,表示方法的返回值
自定义的变量名和自定义的形参名一样 Object res = doOther()
位置:方法定义的上面
在目标方法之后执行的
能够获得目标方法的返回值,可以根据这个返回值做不同的处理功能
能修改返回值
在这里插入图片描述
3)@around 环绕通知
属性:value切入点表达式
位置:方法的定义上面
特点:
它是功能最强的通知
在目标的前后都能增强功能
能控制目标方法是否被调用执行
能修改原来的目标方法执行结果,影响最后的调用结果

等同于jdk的动态代理,ProceedingJoinPoint等同于Method
参数作用:执行目标方法
返回值:目标方法的执行结果,可以被修改。
环绕通知:经常做事务。在方法之前开启事务,执行目标方法,在方法后执行事务
在这里插入图片描述
4)@afterThroing
* 属性:value 切入点表达式
* throwing:自定义的变量,表示目标方法自定义的变量
* 变量名和方法的参数名一样
*
* 特点:
* 在目标方法抛出异常时执行
* 可以做异常的监控程序,监控目标方法是否有异常。如果有异常,可以发送短信,邮件进行通知
在这里插入图片描述
5)@After:最终通知

  • 属性:value切入点表达式
  • 位置:在方法的上面
  • 特点:
  • 总是会执行
  • 在方法后面执行
    在这里插入图片描述
    6)@Pointcut
    用方法名代替execution后面的地址
    在这里插入图片描述
    7)在有接口的情况下默认使用的是jdk动态代理,在无接口的情况下默认使用的是cglib动态代理。如果想在有接口的情况下使用cglib动态代理,要在applicationContext.xml里面加上
    <aop:aspectj-autoproxy proxy-target-class=“true”/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值