网站模糊效果,给客户建设网站税率,广州网页设计公司招聘,中国建筑网官网平台AspectJ 对 AOP 的实现(掌握)
对于 AOP 这种编程思想#xff0c;很多框架都进行了实现。Spring 就是其中之一#xff0c;可以完成面向切面编程。然而#xff0c;AspectJ 也实现了 AOP 的功能#xff0c;且其实现方式更为简捷#xff0c;使用更为方便#xff0c;而且还支…AspectJ 对 AOP 的实现(掌握)
对于 AOP 这种编程思想很多框架都进行了实现。Spring 就是其中之一可以完成面向切面编程。然而AspectJ 也实现了 AOP 的功能且其实现方式更为简捷使用更为方便而且还支持注解式开发。所以Spring 又将 AspectJ 的对于 AOP 的实现也引入到了自己的框架中。
在 Spring 中使用 AOP 开发时一般使用 AspectJ 的实现方式。
AspectJ 简介 AspectJ 是一个优秀面向切面的框架它扩展了 Java 语言提供了强大的切面实现。 官网地址The AspectJ Project | The Eclipse FoundationThe Eclipse Foundation - home to a global community, the Eclipse IDE, Jakarta EE and over 415 open source projects, including runtimes, tools and frameworks.http://www.eclipse.org/aspectj/
AspetJ 是 Eclipse 的开源项目官网介绍如下 a seamless aspect-oriented extension to the Javatm programming language
一种基于 Java 平台的面向切面编程的语言
Java platform compatible兼容 Java 平台可以无缝扩展
easy to learn and use易学易用
AspectJ 的通知类型(理解)
AspectJ 中常用的通知有五种类型
1前置通知
2后置通知
3环绕通知
4异常通知
5最终通知 AspectJ 的切入点表达式(掌握)
AspectJ 定义了专门的表达式用于指定切入点。表达式的原型是
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?namepattern(param-pattern) throws-pattern?)
解释
modifiers-pattern] 访问权限类型
ret-type-pattern 返回值类型
declaring-type-pattern 包名类名
name-pattern(param-pattern) 方法名(参数类型和参数个数)
throws-pattern 抛出异常类型
表示可选的部分 以上表达式共 4 个部分。
execution(访问权限 方法返回值 方法声明(参数) 异常类型)
切入点表达式要匹配的对象就是目标方法的方法名。
execution 表达式中明显就是方法的签名。注意表达式中黑色文字表示可省略部分各部分间用空格分开。在其中可以使用以下符号 举例
execution(public * *(..)) 指定切入点为任意公共方法。execution(* set*(..)) 指定切入点为任何一个以“set”开始的方法。execution(* com.xyz.service..(..)) 指定切入点为定义在 service 包里的任意类的任意方法。execution(* com.xyz.service...(..)) 指定切入点为定义在 service 包或者子包里的任意类的任意方法。“..”出现 在类名中时后面必须跟“*”表示包、子包下的所有类。execution(* ..service..*(..)) 指定所有包下的 serivce 子包下所有类接口中所有方法为切入点execution(* .service..*(..)) 指定只有一级包下的 serivce 子包下所有类接口中所有方法为切入点execution(* .ISomeService.(..)) 指定只有一级包下的 ISomeSerivce 接口中所有方法为切入点execution(* ..ISomeService.(..)) 指定所有包下的 ISomeSerivce 接口中所有方法为切入点execution(* com.xyz.service.IAccountService.*(..)) 指定切入点为IAccountService 接口中的任意方法。execution(* com.xyz.service.IAccountService.*(..)) 指定切入点为IAccountService 若为接口则为接口中的任意方法及其所有 实现类中的任意方法若为类则为该类及其子类中的任意方法。execution(* joke(String,int))) 指定切入点为所有的 joke(String,int)方法且 joke()方法的第一个参数是 String第二个参数是 int。如果方法中的参数类型是 java.lang 包下的类可 以直接使用类名否则必须使用全限定类名如 joke( java.util.List, int)。execution(* joke(String,*))) 指定切入点为所有的 joke()方法该方法第一个参数为 String第二个参数 可以是任意类型如 joke(String s1,String s2)和 joke(String s1,double d2) 都是但 joke(String s1,double d2,String s3)不是。execution(* joke(String,..))) 指定切入点为所有的 joke()方法该方法第一个参数为 String后面可以有 任意个参数且参数类型不限如 joke(String s1)、joke(String s1,String s2)和 joke(String s1,double d2,String s3)都是。execution(* joke(Object)) 指定切入点为所有的 joke()方法方法拥有一个参数且参数是 Object 类 型。joke(Object ob)是但joke(String s)与 joke(User u)均不是。execution(* joke(Object))) 指定切入点为所有的 joke()方法方法拥有一个参数且参数是 Object 类型 或该类的子类。不仅 joke(Object ob)是joke(String s)和 joke(User u)也 是。