为了账号安全,请及时绑定邮箱和手机立即绑定

【学习打卡】第7天+ 反射和AOP动态和静态代理

标签:
Java

课程名称:笑傲Java面试 剖析大厂高频面试真题 秒变offer收割机

课程章节:第6章 JVM原理篇

主讲老师:求老仙

课程内容:

第6章 JVM原理篇

课程收获:

反射和AOP动态和静态代理

问题1)AOP和反射的作用?

AOP的目的就是关注点分离**,关注点分离,就是业务代码中不包含其他业务的代码,例如:订单代码,不应该把日志的代码放到业务代码中。掺杂其他功能的代码。**

反射作用:运行时获取对象的实例,方法,属性

关注点分离做的事情,本身就是领域建设和解耦合。

反射实现AOP代理,动态代理和静态代理

反射获取运行时的对象,AOP是增强对象的功能,分为静态代理和动态代理

问题2)AOP和动态代理?

Spring中的AOP是基于动态代理实现的,即 JDK动态代理和Cglib动态代理。

实现AOP的方案:

1,可以使用joinPoint方法实现(每个方面是独立的模块)

2,可以使用动态代理实现aop

3,使用Javasist,不生成中间class字节码文件,运行时候给class字节码添加功能,但是不会生成class字节码文件。

两种实现方案区别:

动态代理实现的 AOP,不是直接调用核心方法,而是调用包装的方法。

独立的切面,是直接调用核心方法,然后再调用切入方法。

独立切面:

动态代理:

问题3)如何写代理?

为什么需要这三个参数:

**ClassLoader:**被代理类和代理类,要使用相同的加载器,因为代理类和被代理类是基层了同一个接口,所以要使用相同的加载器,所以要将加载接口的加载器,作为参数传入到代理类的方法中。

**Interfaces:**可以传入多个接口,接口是用来创建代理对象的。(因为代理是通过反射实现的,所以肯定需要Class对象。这个接口就是为了创建Class对象)

**InvocationHandler:**增加某个方法,需要重写字节码,生成Class对象,调用重新增强的方法就需要invocationHander(用户仅会调用代理类的方法,用户调用的方法,就是这个invocationHandler的方法)

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消