问题
- 面向切面编程的理解?
AOP的本质是在一系列纵向的控制流程中,把那些相同的子流程提取成一个横向的面
单个切面执行顺序结果是什么?俩个切面重合的时候呢?
jdk代理和cglib代理的区别?
jdk面向接口代理,不需要依赖第三方库
cglib面向类代理,如果没有实现接口会选择cglib代理,效率更快aop同一个类里调用是否生效?
特殊情况下可以生效,设置exposeProxy属性为true 暴露代理,调用的时候从上下文获取代理
基础概念
springAop原理
aop简版uml类图
aop创建代理和方法执行流程图
mybaties aop
- MapperRegistry:addMappers方法将包名下每个mapper类创建一个MapperProxyFactory,放入map中
- MapperProxyFactory:创建一个mapperProxy代理类
- MapperProxy:实现了InvocationHandler主要调用MapperMethod的execute
- MapperMethod:创建需要三个参数:DAO接口本身,方法类,Configuration对象 内部新建SqlCommand,MethodSignature俩个类
自己实现aop
问题:自己实现一套类似于spring或者mybaties的aop 哪些类是必须的?
- 创建代理类
- 一个methodInvoce的实现类 当作拦截器
- 过滤工具类 用来匹配切点
- 解析xml或者注解的工具类
- 详见代码