java-JDK动态代理(AOP)

动态代理(理解):基于反射机制。
掌握程度:
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类的静态方法,创建代理对象。并把返回值转为接口类型

猜你喜欢

转载自blog.csdn.net/SwaeLeeUknow/article/details/107789434
今日推荐