着手使用@AspectJ

来源:互联网 发布:东莞大朗淘宝电商培训 编辑:程序博客网 时间:2024/05/21 16:55

在使用@AspectJ之前,首先必须保证所使用的Java版本是5.0及以上版本,否则无法使用注解技术。

Spring在处理@AspectJ注解表达式时,需要将Spring的asm模块添加到类路径中。asm是轻量级的字节码处理框架,因为Java的反射机制无法获取入参名,Spring就利用asm处理@AspectJ中所描述的方法入参。

此外,Spring采用AspectJ提供的@AspectJ注解类库及相应的解析类库,需要在pom.xml文件中添加aspectj.weaver和aspectj.tools类包的依赖。

AspectJ使用

编写目标类

编写切面

③通过AspectProxyFactory为目标类生成织入PreGreetingAspect切面代理

此外还可以通过xml配置的方式实现


不同的增强类型

@Before

AfterReturning

Around

AfterThrowing

After

DeclareParents


切点函数详解

切点函数是AspectJ表达式语言的核心,也是使用AspectJ进行切面定义的难点

@annotation():表示标注了某个注解的所有方法

例如:@AfterReturning("@annotation(com.smart.anno.NeedTest)") //后置增强切面

@execution()

1.通过方法签名定义切点

execution(public * *(..):匹配所有目标类的public方法,第一个*代表返回类型,第二个*代表方法签名,而..代表任意

入参。

execution(* *To(..)):匹配所有以To为后缀的方法。

2.通过类定义切点

execution(* com.smart.Waiter.*(..)):匹配Waiter接口的所有方法。

execution(* com.smart.Waiter+.*(..)):匹配Waiter接口的所有方法以及子类所特有的方法。

3.通过类包定义切点

execution(* com.smart.*(..)):匹配com.smart包下的所有类的所有方法。

execution(* com.smart..*(..)):匹配com.smart包、子包下所有类的所有方法。

execution(* com..*.*Dao.find*(..)):匹配包名前缀为com的任何包下类名后缀为Dao的方法,方法名

必须以find为前缀。









原创粉丝点击