动态代理(理解):基于反射机制。
掌握程度:
1.什么是动态代理?
使用jdk反射机制,创建对象的能力,创建的是"代理类"的对象。而不用你创建类文件。不用写java文件。
动态:
在程序执行时,调用jdk提供的方法才能创建代理类的对象。
程序不执行,这个能力是不执行的。
(程序需要跑起来)
JDK动态代理,必须有接口,目标类必须实现接口,没有接口时,需要使用cglib动态代理
2.知道动态代理能做什么?
可以在不改变原来目标方法功能的前提下,可以在代理中增强自己的代码。
程序开发中的意思。
比如:你所在的项目中,有一个功能是其他人(公司的其他部门,其他小组的人)写好的,你可以使用。
GoNeng.class,GoNong gn = new GoNeng(), gn.print();
你发现这个功能,现在还缺点,不能完全满足我项目的需要。我需要在gn.print()执行后,自己在增加代码。
用代理来实现 gn.print() 调用时,增加自己代码,而不用去改原来的GoNeng文件。
后面要学框架: mybatis,spring
1.代理
代购,中介,换ip,商家等等
实现代理的方式**
1.静态代理
1) 代理类是自己手工实现的,自己创建一个java类,表示代理类。
2) 同时你所要代理的目标类是确定的。
特点
1)实现简单
2)容易理解
缺点
当你的项目中,目标类和代理类很多的时候,有以下的缺点:
1)当目标类增加了,代理类可能也需要成倍的增加,代理类数量过多。
2)当接口中功能增加了,或者修改了,会影响众多的实现类,厂家类,代理都需要修改,影响比较多。影响越多,工作量越多,改的越多,越容易出错。项目维护难度就高了。
代理类完成的功能:
1.目标类中方法的调用
2.功能增强
2.动态代理
在静态代理中目标类很多时候,可以使用动态代理,避免静态代理的缺点。
动态代理中目标类即使很多,
1)代理类数量可以很少,
2)当你修改了接口中的方法时,不会影响代理类。
动态代理:
在程序执行过程中,使用jdk的反射机制,来创建代理类对象,并动态的指定要代理目标类。
换句话说:动态代理是一种创建java对象的能力,让你不用创建TaoBao类,就能创建代理类对象。
实现动态代理的步骤:
1.创建接口,定义目标类要完成的功能
2.创建目标类实现接口
3.创建InvocationHandler接口的实现类,在invoke方法中完成代理类的功能
3.1调用目标方法
3.2增强功能
4.使用Proxy类的静态方法,创建代理对象。并把返回值转为接口类型