小鸦-spring AOP的小模拟
2016-03-23 21:25
405 查看
首先, 为什么要用AOP?
不用AOP的话, 我们需要手动添加大量重复代码到 不同类的 method
结论, 它作用就是 动态的复制+粘帖
我们需要做的是
1. 不改变原来的class以及其method
2. 让class增加其他功能
3. 动态
这三点结合起来, 在字节码上操作是不可能, 也就只能创造一个class.
1. 原本功能 记做 origin.Method();
2. 额外功能 记做 extra.before(), extra.after();
这种做法, 就已经很自然可以想到 代理模式了
从上面, 我们就可以看到, 剩下要做啥?
1. extra要动态
2. origin要动态
动态, 常规做的两点
1. 配置文件 (e.g. xml文档)
2. 一堆烦人的反射
3. 一个平台(Spring)执行操作
现在, 我们主要要解决的是烦人的反射
1. 动态代理, 帮我们解决origin动态的问题
2. 我们就只需要关注 动态代理 里 extra类 怎么实现就可以了
extra类的操作, 根据配置文档, 获得class, 再找到对应的method, 再调用方法就可以了… (= =)
扩展阅读:
动态代理模式: https://www.ibm.com/developerworks/cn/java/j-lo-proxy1/
吐槽: 本来不想改的..被面试官问到且无法流畅回答, 只能这样写, 以后被免的时候直接拿出来
不用AOP的话, 我们需要手动添加大量重复代码到 不同类的 method
结论, 它作用就是 动态的复制+粘帖
我们需要做的是
1. 不改变原来的class以及其method
2. 让class增加其他功能
3. 动态
这三点结合起来, 在字节码上操作是不可能, 也就只能创造一个class.
1. 原本功能 记做 origin.Method();
2. 额外功能 记做 extra.before(), extra.after();
这种做法, 就已经很自然可以想到 代理模式了
//这种想法实现,首先我们要一个代理类 public AOPproxy implement originInterface{ Object extra;//以及set功能 originInterface origin;//以及set功能 Method(){ extra.before(); origin.Method(); extra.after(); } } //这里的originInterface, 是为了让其他类调用时, 不会感觉到异常, 类似继承的功能
从上面, 我们就可以看到, 剩下要做啥?
1. extra要动态
2. origin要动态
动态, 常规做的两点
1. 配置文件 (e.g. xml文档)
2. 一堆烦人的反射
3. 一个平台(Spring)执行操作
现在, 我们主要要解决的是烦人的反射
1. 动态代理, 帮我们解决origin动态的问题
2. 我们就只需要关注 动态代理 里 extra类 怎么实现就可以了
//改一下接口,就变成动态代理了 public AOPproxy implement InvocationHandler { Object extra;//以及set功能 @override public Object invoke(Object proxy, Method method, Object[] args){ extra.before(); Object result = method.invoke(target, args); extra.after(); } }
extra类的操作, 根据配置文档, 获得class, 再找到对应的method, 再调用方法就可以了… (= =)
扩展阅读:
动态代理模式: https://www.ibm.com/developerworks/cn/java/j-lo-proxy1/
吐槽: 本来不想改的..被面试官问到且无法流畅回答, 只能这样写, 以后被免的时候直接拿出来
相关文章推荐
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- 模拟Spring的简单实现
- spring+html5实现安全传输随机数字密码键盘
- Spring中属性注入详解
- SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
- struts2 spring整合fieldError问题
- spring的jdbctemplate的crud的基类dao
- 读取spring配置文件的方法(spring读取资源文件)
- Spring Bean基本管理实例详解
- java实现简单美女拼图游戏
- 详解Java的Spring框架中的事务管理方式
- 解析Java的Spring框架的BeanPostProcessor发布处理器
- Java开发框架spring实现自定义缓存标签
- java基本教程之线程休眠 java多线程教程
- JSP开发中在spring mvc项目中实现登录账号单浏览器登录
- spring boot实战之内嵌容器tomcat配置