[6]-AOP动态代理
来源:互联网 发布:网络红歌2010 编辑:程序博客网 时间:2024/04/27 17:25
AOP术语
- 连接点:被我们拦截到的那个方法
- 切面的切点:指定希望在程序流中拦截的连接点
- 切面的通知类型:
- 1)前置:在连接点之前
- 2)后置:在连接点正常完成之后
- 3)异常:在方法抛出异常退出时
- 4)最终:2)后置 + 3)异常
- 5)环绕:可改变参数和返回结果,容易忘记执行原始的方法,invocation.proceed()
使用AOP:基于注解
- 1)定义切面:MarinlogService接口,是一个注解
- MarinlogUser类,使用@Aspect修饰
- 切入点和切入类型
- 连接点:
- MarinlogUser类中
代理
public static void main(String[] args){ RealPerson xiaoMing=new RealPerson(); ProxyPerson proxy=new ProxyPerson(xiaoMing); proxy.sentGigt(1);}public interface abstractPerson { public void sentGigt(int toPersonId);}public class RealPerson implements abstractPerson{ @Override public void sentGigt(int toPersonId){ Print.print(" 被代理的类"); }}public class ProxyPerson implements abstractPerson{ public RealPerson real; public ProxyPerson(RealPerson real){ this.real=real; } @Override public void sentGigt(int toPersonId){ real.sentGigt(toPersonId); }}
- 静态代理:与反射无关,运行前,代理类的class 文件已生成,编译期间进行静态织入
- 动态代理:反射生成代理类的字节码
- 定义proxyHandler,实现InvocationHandler接口,持有被代理接口的引用,重写invoke()
- Proxy.newProxyInstance(加载器,接口列表,proxyHandler)生成代理类对象,
- 继承了Proxy类,实现了被代理者的所有接口,final
- cglib(代理类)
- 若被代理者没有实现任何接口,创建cglib代理,使用ASM(java字节码处理框架)
- 可强制 < aop:aspectj-autoproxy proxy-target-class=”true”/>
AOP介绍
AOP是对OOP思想的补充和完善,OOP引进”抽象-封装-继承-多态”等概念,进行由上到下的抽象和层次封装
- 但是具体细粒度到每个事物内部的情况,OOP就显得无能为力了,比如日志功能。
- 日志代码往往水平地散布在所有对象层次当中,与它所散布到的对象的核心功能无关。
- 导致了大量代码的重复,不利于各个模块的重用
横切技术
- 剖解开封装的对象内部,将公共行为封装成一个独立的模块(切面)
- 又能将剖开的切面复原,融入核心业务逻辑中。这样,能便于之后横切功能的编辑和重用
0 0
- [6]-AOP动态代理
- Aop 代理 动态代理
- 动态代理与AOP(6)
- AOP代理之动态代理
- AOP代理之动态代理
- 代理模式 动态代理 AOP
- AOP动态代理
- AOP之动态代理
- 动态代理&AOP
- Spring Aop 动态代理
- aop入门:动态代理
- AOP基础--动态代理
- Spring AOP动态代理
- Spring AOP 动态代理
- spring aop动态代理
- AOP动态代理
- AOP动态代理
- Spring(AOP动态代理)
- 数据库基本的sql语句
- SIP资料汇总
- 生成图片验证码
- Linux中的常用命令
- MySQL索引原理详解
- [6]-AOP动态代理
- c#导出数据至excel模板中,可分页
- disconf源码分析
- [经验之谈]数据库查询速度优化之解决技巧
- ES6 js 的全局管理计时器
- Android热补丁动态修复技术(三)—— 使用Javassist注入字节码,完成热补丁框架雏形(可使用)
- 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
- 398. Random Pick Index
- 吾怕吾识货,就怕货比货--对冲