第三章切入点详解
决定了额外功能的加入位置(方法)
<aop:pointcut id="pc" expression="execution()"/>
execution(* *(..)) >> 匹配了所有方法
execution() 切入函数
* *(..) 切入点表达式
1.切入点表达式
1.1方法切入点表达式
* *(..) -> 所有方法
* 修饰符 返回值
* 方法名
(..) 参数列表
1.定义login方法做为切入点
* login(..)
2.定义login方法且有两个字符串类型参数
* login(String,String)
3.register(User user)
* register(com.xia.User)
自己定义的类需要填入全限定名
4.login(String,..)
除了第一个是String 剩下的都可以
5.User register(String name,String password)
com.xia.User register(String,String)
6.全限定
* com.xia.service.impl.UserService.login(String,String)
1.2类切入点
1.com.xia.service.impl.UserServiceImpl类中的所有方法
* com.xia.service.impl.UserServiceImpl.*(..)
2.不同包中相同类中的所有方法
2.1类只存在一级包
* *.UserServiceImpl.*(..)
2.2类存在多级包
* *..UserServiceImpl.*(..)
1.3包切入点
1.切入点包中的所有类只能在impl中而不能在子包中
* com.xia.service.impl.*.*(..)
2.切入点包中的所有类只能在impl中和子包中
* com.xia.service.impl..*.*(..)
2.切入点函数
1.execution()
execution(* com.xia.service..*.*(..))
2.args()
匹配方法名
args(String,String)
execution(* *(String,String))
3.within
类,包切入点表达式匹配
within(com.xia.service..*)
within(*..UserServiceImpl)
4.@annotation
为有特定注解的方法加入额外功能
<aop:pointcut id="anno-pc" expression="@annotation(com.xia.Log)"/>
3.切入点逻辑运算
-
and
login(String name,String password)
execution(* login(..)) and args(String,String)
与操作不能用于同种类型的切入点函数
-
or
execution(* login()) or execution(* register())