AOP参数使用
又双叒叕是程序汪2020-12-25 23:19
使用通配符和前置通知和通知参数含义
通配符
可以匹配任意方法和任意包
前面的*表示通配符,可以匹配任意方法名,任意类名,任意级别包名
举个例子:com.wq.test.Demo.* 表示任意方法名都被拦截作为 切点
上述是错误的书写
要保留方法括号() com.wq.test.Demo.*()
效果:
发现每个方法都被插入前置后置通知方法。
但是
当demo4带有参数则不能被标为切点 com.wq.test.Demo.*()括号没有参数那么-所运行的程序没有参数 列子:
demo4:
测试类:随便给个参数
最后结果:
发现demo4并没有被插入前置后置参数。
总结:如果希望匹配任意类型参数 (..)
(..)
效果:
当有多个包或者java对象
通配符另一个用法:
举个例子:
新建demo1类实现demo11方法v
Spring配置文件
测试类获取类对象
测试发现并没有插入demo11方法的前后通知
配置缺点的通背符语句,可是非常重要,对切点的方法选择
————>>这是因为配置切点需要使用通配符
当
表示这个包上的任意 类的,任意方法的,任意参数都需要,都要形成切面。
效果:
总结:以后一个公司项目组需要很多人开发,按模块进行划分,有多少个模块建立多少个包,正常写项目,每个人是都有自己的pojo,mapper等等,一个大项目相当于才算很多小块儿。
现在我需要拦截某一个项目,具体的某一个方法,或者某一个包的某一个类的,任意某一个方法,com.wq.*.service.impl.*(..) *表示声明通配符----------具体到哪个类哪个方法
通知参数的含义:
示例
结果:
用于获取切点传递的对象,并不影响主程序纵向运行
前置通知获取传入值(还没进入切点程序前做小动作)
实例:
正常程序 要传入的参数(将被前置通知给截获)
MyBeforeAdvice前置通知处理截获数据
怎么处理数据呢
结果:
成功取到参数信息
总结:arg0:切点方法对象,Method对象
arg1:切点方法参数
arg2:切点在哪个对象中
后置通知获取传出值-也叫返回值(出切点程序前做小动作)
正常程序需要返回参数:
获取数据
结果:
总结:
arg0:切点方法的返回值
arg1:切点方法对象
arg2:切点方法的参数
arg3:切点方法所在类的对象。