类加载,反射,代理,二叉树
GC条件:
1.该类的所有实例都已经被回收,也就是java堆中不存在该类的任何实例。
2.该类的ClassLoader已经被回收。
3.该类对应的java.lang.Class对象没有任何地方被引用,无法在任何地方通过反射获取该类的方法。
Speingmvc的核心类:
DispatcherServlet,前置控制器
HandlerMapping接口,处理请求的映射
HandlerAdapter接口,处理请求的映射
ModelAndView类。
类的加载是指将类的.class文件中的二进制数据读入内存中,并对数据进行验证,准备,解析,初始化,将其转化为方法区的运行时的数据结构。
加载,验证,准备,解析,初始化。
Java反射是可以让我们在运行时,通过一个类的Class对象来获取类的方法,属性,接口,父类等信息。
动态代理步骤:
根据需要实现的接口信息,在代码中动态创建Proxy类的字节码,创建InvocationHandle实例handler,用来处理Proxy所有方法调用
1.通过java.lang.reflect.Proxy类来动态生成代理类
2.代理类要实现InvocationHandler接口
3.JDK代理只能基于接口进行动态代理
Cglib底层采用ASM字节码生成框架,使用字节码技术生成代理类,对制定的业务类创建子类,并在子类中采用方法拦截技术拦截所有对父类方法的调用,并顺势加入横切逻辑。