黑马程序员-Java高新技术_动态创建+代理+aop概念+sprint概念视频学习笔记
代理模式有一个要点就是代理类的要与目标类有相同的接口。
jvm有动态创建类的api,但使用jvm动态创建类需要指定一个接口。可以使用CGLIB开源库可以无需指定接口二去动态创建类。
aop主要靠代理模加动态创建类实现,Poxy类用于动态创建新类,而这个新类是在目标类的代理类。简单使用代码:
Class clazzProxy1 = Proxy.getProxyClass(Collection.class.getClassLoader(), Collection.class); Constructor constructor = clazzProxy1.getConstructor(InvocationHandler.class); Collection proxy2 = (Collection)constructor.newInstance(new InvocationHandler(){ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { return null; } });
知识点1:
Proxy创建的新类的方法,内部实现都是调用创建实例对象时传入的InvaocationHandler对象的invoke方法。invoke方法声明:public Object invoke(Object proxy, Method method, Object[] args)。如果其实现继续调用proxy对象的方法就会陷入死循环,因为proxy对象所有方法的实现在调用invoke方法。
InvaocationHandler是抽象类所以我们需要定义新的子类,在子类里invoke方法应该调用代理目标的方法。
注意1:
Proxy创建的新代理类也是继承自object类,它并不会把object类的所有方法都转手交给InvaocationHandler处理,只会把hashcode,toString和equals三个方法转给InvaocationHandler。