(1)本篇博客的代码,基于【Spring AOP面向切面编程2:初识AOP二:AOP初体验;(一个Spring AOP的案例,走了一遍流程)】 中的代码;
(2)如在【Spring AOP面向切面编程2:初识AOP二:AOP初体验;(一个Spring AOP的案例,走了一遍流程)】中,就使用了切点表达式;
目录
案例1:【Spring AOP面向切面编程2:初识AOP二:AOP初体验;(一个Spring AOP的案例,走了一遍流程)】中的案例;
案例2:只圈定Service类;(这是日常开发中,最常用的形式)
案例8:圈定指定格式的参数的方法:只捕获有两个参数的方法;(*代表一个参数)
案例9:圈定指定格式的参数的方法:只捕获有两个参数的方法,而且第一参数需要是String类型的;
一:切点表达式分析;
说明:(根据上图中的红色箭头,依次描述)
(1)【public】:方法修饰符;因为,大部分目标方法都是public修饰的,所以public可以省略不写;不写public的时候,该位置的默认值就是public;
(2)【*】:方法如果不需要返回值,就写void;如果需要返回值,就写对应的返回值类型;如果需不需要返回值都可以,就写*通配符;
(3)【com.imooc】:切点所描述的范围;这儿意思是,只能是com.imooc包下的;
(4)【..】:包通配符;这儿意思是,只要隶属于com.imooc包下的类,无论是如com.imooc.UserDao类,还是如com.imooc.aop.UserDao的类都在范围内;
(5)【*】:对应了类名;*通配符,表示任意类都可以;
(6)【*】:*通配符,表示任意方法;
(7)【..】:参数通配符,表示去匹配任意形式、不限个数、不限类型的方法;(如,方法重构时,就可以设置这个参数,来指定特定的方法)(在这儿,*代表一个参数;(*,*)表示匹配有两个参数的方法)
上面PointCut表达式整体的意思是:去匹配com.imooc包下的,所有类的所有public修饰的方法;
二:切点表达式案例;
SpringApplication入口类;
package com.imooc.spring.aop; import com.imooc.spring.aop.dao.UserDao; import com.imooc.spring.aop.service.UserService; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class SpringApplication { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); UserService userService = context.getBean("userService