专业的JAVA编程教程与资源

网站首页 > java教程 正文

java手把手教你写动态代理和静态代理的实现

temp10 2024-10-04 12:33:16 java教程 9 ℃ 0 评论

1.静态代理

需要目标类实现接口,代理类和目标类实现相同的接口,静态代理,是有代理类的,而动态代理是没有的。

java手把手教你写动态代理和静态代理的实现

1.1定义接口类UserService

1.2定义接口类的实现类

也就是我们的目标类,我们需要增强的类

1.3定义目标类的代理类

要和目标类实现相同的接口,在此代理类的方法中进行增强

1.4测试

测试一下,原本目标类中有个方法是返回iloveyou,在代理类中,我们对此方法进行了增强,将字母转为了大写进行返回

测试结果如下:

2.jdk动态代理

jdk动态代理的原理是,和目标类实现共同的接口,由Proxy.newProxyInstance生成一个代理对象,在代理对象调用方法时,在invoke方法中增强。

jdk动态代理,不需要代理类,他的实现必须是要求目标类实现了某个接口,然后代理对象和目标类实现了相同的接口。

2.1定义接口

2.2定义实现类

也就是需要增强的目标类

2.3测试jdk动态代理

结果:

3.cglib动态代理

cglib动态代理的原理是,生成目标类的子类,在子类中进行增强,这个子类对象就是代理对象。

使用cglib代理时,要求目标类必须可以被继承,即没有用final修饰。

CGLIB(code generation Library)是一个开源项目,是一个强大的,高性能的,高质量的代码生成类库。他可以在运行期间拓展和增强java类,Spring用它来实现AOP编程。

3.1目标类UserService

不需要实现接口

3.2代理工厂

用来生成目标类的代理对象,此类需要实现MethodInterceptor

3.3测试cglib动态代理

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表