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