继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

一起写代码2公众号
关注TA
已关注
手记 34
粉丝 1
获赞 5

课程名称:笑傲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的方法)

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP