Spring框架----切入点表达式的写法

38 篇文章 1 订阅
23 篇文章 2 订阅

上一节我们实现了Spring的基于XML的AOP。
Spring的基于 XML的AOP的实现
我们将测试一下上一节的代码执行结果

/*测试aop的配置*/
public class AOPTest {
    public static void main(String[] args) {
        //1.获取容器
        ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");
        //2.获取对象
        IAccountService as=(IAccountService)ac.getBean("accountService");
        //3.执行方法
        as.saveAccount();
	as.updateAccount(1);
as.deleteAccount();

    }
}

在这里插入图片描述
只有保存输出了,其他都没有输出,原因就是切入点表达式配置死了,就是保存,但是通常情况下我们是会对业务层所有方法进行增强,但不是每个方法都写一遍。

切入点表达式的写法

关键字:execution(表达式)
表达式:访问修饰符 返回值 包名.包名....类名.方法名(参数列表)
标准表达式写法
public void com.yujie.service.impl.AccountServiceImpl.saveAccount();
我们的切入点表达式明确的说明了这个方法要对哪个方法进行增强。
访问修饰符可以省略
void com.yujie.service.impl.AccountServiceImpl.saveAccount();
返回值可以使用通配符表示任意返回值,即void可以改为*
包名可以使用通配符来表示任意包,但是有几级包就需要写几个*,比如有4个包,就写*.*.*.*.
包名可以使用..表示当前包及其子包
* *..AccountServiceImpl.saveAccount()表示任意包下的只要有一个AccountServiceImpl类都会被增强
类名和方法名都可以使用*来实现通配。
如果写成这样* *..*.*(),也只会有两个方法被执行。因为有一个方法有参数。
参数列表
可以直接写数据类型:
基本类型直接写名称               int
   引用类型写包名.类名的方式          java.lang.String
可以使用通配符表示任意类型,但是必须有参数* *..*.*(*)
当我们把参数写成..表示参数有无都可以,即真正的全通配写法
全通配写法
* *..*.*(..)
实际开发中切入点表达式的通常写法
切到业务层实现类的所有方法
	 * com.yujie.service.impl.*.*(..)
<!--配置通知的类型,并且建立通知方法-->
    <aop:before method="printLog" pointcut="execution(* *..*.*())"></aop:before>

在这里插入图片描述

<!--配置通知的类型,并且建立通知方法-->
    <aop:before method="printLog" pointcut="execution(* *..*.*(int))"></aop:before>

在这里插入图片描述

<aop:before method="printLog" pointcut="execution(* *..*.*(*))"></aop:before>

在这里插入图片描述

<aop:before method="printLog" pointcut="execution(* *..*.*(..))"></aop:before>

在这里插入图片描述
在实际开发中,最好不要写成这种全通配的方式,否则你程序在执行的时候所有类的方法都满足于这个条件,增强代码就都执行了一遍,这样肯定不是我们所需要的。

实际开发中切入点表达式的通常写法
切到业务层实现类的所有方法
	 * com.yujie.service.impl.*.*(..)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值