AOP
config
aspect - 关联bean实例
pointcut - 选择方法
配置切入点的写法
匹配某个类的所有方法
.*(..)
申明切点的一些方式
配置切入点Pointcut(找到某个功能模块的具体方法)
execution用于匹配某个功能模块的具体方法。
以下SpringAOP和Spring支持的AspectJ都支持。
图一的1:执行所有的public方法时,进行切入(执行相应切面的相应功能)。
图一的2:执行所有的set方法时,进行切入。
图一的3:执行com.xy.service.AccountService类下的所有方法时,进行切入。
图一的4:执行com.xyz.service包下的所有方法时,进行切入。
图一的5:执行com.xyz.service包下以及子包下的所有方法时,进行切入。
以下为SpringAOP自己支持的。
SpringAOP其他的匹配。
图一的1:匹配目标对象。
图一的2:匹配参数的。
图一的3:按注解匹配的。
图一的4:按注解匹配的。
图一的5:按注解匹配的。
图二的1:参数里采用了何种注解。
图二的2:采用了何种bean。
图二的3:bean是以何种形式进行结尾的。(这些可以去Spring官方文档和搜索引擎搜索,会有很全面的解释,这些切入点会有很多类型,在具体使用时,可以查找相应文档)
完整的AOP配置(根据不同业务需求,查找相关文档,进行不同的expression表达式配置)
案例1:表示执行service包下的所有类的任何类型的方法时,进行切入。
案例2:表示执行SystemArchitecture的businessService()方法时,才进行切入。
案例3:执行AspectBiz中的所有方法,都会进行切入。
配置以某个单词结尾的类:例如上面Aspect编写成*。
pointcut
within(com.xyz.service.*)(only in Spring AOP)
within(com.xyz.service..*)(only in Spring AOP)
within 用于匹配指定类型内的方法执行
this(com.xyz.service.AccountService)(only in Spring AOP)
this 用于匹配当前AOP代理对象类型的执行方法
pointcut
execution(public * *(..)) 切入点为执行所有public方法时
execution(*set*(..)) 切入点为执行所有set开始的方法时
execution(*com.xyz.service.AccountService.*(..)) 切入点为执行AccountService类中的所有方法时
execution(*com.xyz.service..(..))切入点为执行com.xyz.service包下的所有方法时
execution(*com.xyz.service...(..))切入点为执行com.xyz.service包及其子包下的所有方法时
配置切入点pointcut
pointcut
有个坑:
在*和com.imooc.aop.schema.advice.biz.AspectBiz.*(..)之间有空格,不然会报错。
配置切入点Pointcut(找到某个功能模块的具体方法)
execution用于匹配某个功能模块的具体方法。
以下SpringAOP和Spring支持的AspectJ都支持。
execution(public * *(..)):执行所有的public方法时,进行切入(执行相应切面的相应功能)。
execution(* set*(..)):执行所有的set方法时,进行切入。
execution(* com.xyz.service.AccountService.*(..)):执行com.xyz.service.AccountService类下的所有方法(public/protected/private方法)时,进行切入。
execution(* com.xyz.service..(..)):切入点为com.xyz.service包下的所有方法
execution(* com.xyz.service...(..)):切入点为com.xyz.service包及其子包下的所有方法
以下为SpringAOP自己支持的。
配置切入点Pointcut(找到某个功能模块的具体方法)
execution用于匹配某个功能模块的具体方法。
以下SpringAOP和Spring支持的AspectJ都支持。
图一的1:执行所有的public方法时,进行切入(执行相应切面的相应功能)。
图一的2:执行所有的set方法时,进行切入。
图一的3:执行com.xy.service.AccountService类下的所有方法时,进行切入。
图一的4:执行com.xyz.service包下的所有方法时,进行切入。
图一的5:执行com.xyz.service包下以及子包下的所有方法时,进行切入。
以下为SpringAOP自己支持的。
SpringAOP其他的匹配。
图一的1:匹配目标对象。
图一的2:匹配参数的。
图一的3:按注解匹配的。
图一的4:按注解匹配的。
图一的5:按注解匹配的。
图二的1:参数里采用了何种注解。
图二的2:采用了何种bean。
图二的3:bean是以何种形式进行结尾的。(这些可以去Spring官方文档和搜索引擎搜索,会有很全面的解释,这些切入点会有很多类型,在具体使用时,可以查找相应文档)
完整的AOP配置(根据不同业务需求,查找相关文档,进行不同的expression表达式配置)
案例1:表示执行service包下的所有类的任何类型的方法时,进行切入。
案例2:表示执行SystemArchitecture的businessService()方法时,才进行切入。
案例3:执行AspectBiz中的所有方法,都会进行切入。
配置以某个单词结尾的类:例如上面Aspect编写成*。
pointcut一些参数的说明四:
pointcut一些参数的说明三:
pointcut一些参数的说明二:
pointcut一些参数的说明一:
pointcut需要配置在aspect里面,在expression中配置这些参数
配置文件中 <aop:config> 中pointcut
配置切入点pointcut
pointcut 3
pointcut 2
point 1
切入点pointcut
切入点配置示例
示例2:
执行这个类的businessService()方法时才切入
示例1:
执行该包目录下所有类的方法时切入
再有几个看看
另外几种配置(包含注解配置)
SpringAOP特有