Spring笔记(七)
来源:互联网 发布:网络院线 英文 编辑:程序博客网 时间:2024/05/02 04:25
Spring基于@AspectJ和Schema的AOP
2016/6/21 13:08:12 seventeenWen
AspectJ的用法
public interface Waiter { void greetTo(String name); void serveTo(String name);}
public class NativeWaiter implements Waiter{public void greetTo(String name) { System.out.println("NativeWaiter greetTo"+name);}public void serveTo(String name) { System.out.println("NativeWaiter serveTo"+name);}}
@Aspectpublic class PreGreetAspectJ { @Before("execution(* greetTo(..))") public void beforeGreeting(){ System.out.println("你好! "); }}
public class AspectJProxyTest {public static void main(String[] args) { Waiter target =new NativeWaiter(); AspectJProxyFactory factory =new AspectJProxyFactory(); factory.setTarget(target); factory.addAspect(PreGreetAspectJ.class); Waiter proxy =factory.getProxy(); proxy.serveTo("seventeenWen"); proxy.greetTo("seventeenWen");}}
NativeWaiter serveToseventeenWen你好! NativeWaiter greetToseventeenWen
通过配置文件配置AspectJ切面
- 自动为使用了@AspectJ的类创建代理,它有一个属性proxy-target-class=”false”使用了JDK动态代理技术,true使用CGLib动态代理技术
@AspectJ注解语法
AspectJ切点表达式:关键字+操作参数
Spring支持AspectJ的九个切点表达式函数,分为四个类型:
- 方法切点函数:描述目标类方法信息定义
- 方法入参切点函数:描述目标类方法入参的信息定义
- 目标类切点函数:描述目标类类型信息定义
- 代理类切点函数:描述目标类的代理类饿信息定义
类名类别函数入参说明方法切点函数execution()方法匹配模式串满足某一匹配模式的所有目标类方法连接点@annotation()方法注解类名表示标注了特定的注解的目标方法的连接点方法入参切点函数args()通过判别目标类方法运行时入参对象的类型定义连接点@args()类型注解类名通过判别目标方法运行时入参对象的类是否标注特定的注解目标切点函数within()类型匹配串表示特定域下的所有连接点target()类名假如目标类按类型匹配于指定类,则目标类的所有连接点匹配这个切点@within()类型注解类名类型注解类名目标类标注了特定注解,则目标类所有连接点匹配该切点(包括实现类)目标类切点函数@target()类型注解类名目标类标注了特定注解,则目标类所有连接点匹配该切点代理类切点函数this()类名
AspectJ的通配符
- *:匹配任意字符,但只能匹配上下文的一个元素
- ..:匹配任意字符,可以匹配上下文的多个元素,表示类时必须和*一起使用,表示入参是则单独使用
- +:表示按类型匹配的所有类,必须跟在类名后面,代表匹配类的继承和扩展指定类的所有类,同时还包括自己本身。
AspectJ的逻辑运算符
- &&:与操作符,相当于切点的交集运算,如果在XML文件中配置,可以使用&的转义字符&代替,或者使用Spring提供的“and”,
- ||:或操作符,相当于切点的并集运算,等效于“or”
- !:非操作符,相当于切点的反集运算,等效于“not”
在操作符前后加空格
AspectJ的增强注解
@Before
前置增强,等于BeforeAdvice的功能
- value:定义切点
- argNames:Java的反射无法获得方法的入参名,所以必须通过注解标注增强方法的参数名,多个参数间用逗号隔开
@AfterReturning
后置增强,等于AfterReturningAdvice
- value:定义切点
- pointcut:表示切点的信息,如果指定,将覆盖value
- returning:将目标对象的返回值绑定给增强的方法
- argsNames:Java的反射无法获得方法的入参名,所以必须通过注解标注增强方法的参数名,多个参数间用逗号隔开
@Around
环绕增强:等于MethodInterceptor
- value:定义切点
- argsNames:
@AfterThrowing
抛出增强,等于ThrowsAdvice
- value:定义切点
- pointcut:
- throwing:将抛出的异常绑定到增强方法上
- argsNames:
@After
Final增强,不管是抛出异常还是正常退出,都会执行
- value:
- argsNames:
@DeclareParents
引介增强,等于IntroductionInterceptor
value:
deaultImpl:默认的接口实现
0 0
- Spring笔记(七)
- Spring学习笔记(七)
- Spring学习笔记(七)
- Spring学习笔记(七)
- 学习Spring笔记七
- spring学笔记七
- Spring学习笔记(七)Spring对Dao的支持
- Spring黑马笔记入门七
- SPRING技术内幕-笔记(七)WEB环境中的springMVC
- Spring学习笔记(七):IOC控制反转
- Spring 学习笔记(七)——远程服务
- 【笔记】Spring MVC学习指南(七)验证器
- 韩顺平Spring框架学习,学习笔记(七)
- Spring 学习笔记(七) SpringMVC与Hibernate的整合
- spring in action 学习笔记(七)注入内部bean
- 初始spring(七)
- Spring Boot学习笔记(七) Docker
- Spring学习笔记(七) --- 运行时值注入
- My97DatePicker选择起始日期
- caffe各层介绍
- Android studio gradle配置
- Linkedin被“豪吞”,是互联网时代垄断者的网络效应
- Javascript——流程控制语句
- Spring笔记(七)
- 关于Android适配华为等带有底部虚拟按键的解决方案
- [已解决]eclipse+ADT+Android SDK 搭建Android 开发环境
- python中的requests模块错误
- iOS 获取当前月份一共多少天 ,获取当前某年某月某日, 当前日期星期几
- 如何用SQL SERVER取分组数据第一条
- 基础知识
- POJ3680最小费用最大流
- Gas Station