台州市建设规划局路桥分局网站在上海做钟点工的网站
- 作者: 五速梦信息网
- 时间: 2026年04月20日 08:25
当前位置: 首页 > news >正文
台州市建设规划局路桥分局网站,在上海做钟点工的网站,哪个网站可以做市场调研报告,什么是网络营销直播✅作者简介#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者#xff0c;修心和技术同步精进。 #x1f34e;个人主页#xff1a;Java Fans的博客 #x1f34a;个人信条#xff1a;不迁怒#xff0c;不贰过。小知识#xff0c;大智慧。 #x1f49e;当前专栏… ✅作者简介2022年博客新星 第八。热爱国学的Java后端开发者修心和技术同步精进。 个人主页Java Fans的博客 个人信条不迁怒不贰过。小知识大智慧。 当前专栏SSM 框架从入门到精通 ✨特色专栏国学周更-心性养成之路 本文内容Spring代理模式——静态代理和动态代理 文章目录代理模式1、静态代理2、动态代理代理模式
在学习 AOP 之前我们先来了解下代理模式 代理模式分为静态代理以及动态代理属于23中设计模式之一。 AOP 的底层机制就是动态代理。 作用
通过代理类为原始类增加额外的功能
1、静态代理
1案例展示
【1】定义一个 Teacher 接口接口中定义两个方法teachOnLine 和 teachOffLine。
package cn.gc.spring03.interfce;public interface Teacher {String teachOnLine(String course);String teachOffLine(String course);
}【2】定义一个实现 Teacher 接口的 TeacherA 实现类代码如下
package cn.gc.spring03.interfce.impl;import cn.gc.spring03.interfce.Teacher;public class TeacherA implements Teacher {Overridepublic String teachOnLine(String course) {System.out.println(开始course课程线上教学);return course课程线上教学;}Overridepublic String teachOffLine(String course) {System.out.println(开始course课程线下教学);return course课程线下教学;}
}【3】现在我们要在两个方法中的 开始课程教学 的前后添加上下课铃声的功能此时我们再定义一个实现 Teacher 接口的静态代理类 TeacherAStaticProxy代码如下
package cn.gc.spring03.proxy;import cn.gc.spring03.interfce.Teacher;
import cn.gc.spring03.interfce.impl.TeacherA;public class TeacherAStaticProxy implements Teacher {TeacherA teacherAnew TeacherA();Overridepublic String teachOnLine(String course) {System.out.println(course课程上课时间到了);String s teacherA.teachOnLine(course);System.out.println(course课程下课时间到了);return s;}Overridepublic String teachOffLine(String course) {System.out.println(course课程上课时间到了);String s teacherA.teachOffLine(course);System.out.println(course课程下课时间到了);return s;}
}
【4】运行效果如下 2静态代理优缺点
1优点 在不修改目标对象的功能前提下能通过代理对象对目标功能扩展可以使得真实角色更加纯粹不再去关注一些公共的事情公共的业务由代理来完成实现了业务的分工。 2缺点 因为代理对象需要与目标对象实现一样的接口所以会很多代理类 ,一旦接口增加方法目标对象与代理对象都要维护工作量变大开发效率降低。
3开发代理对象的原则 代理对象和目标对象实现相同的接口 代理对象依赖于目标对象
2、动态代理
在不改变原来的代码的情况下实现了对原有功能的增强这是 AOP 中最核心的思想。
AOP纵向开发横向开发 1简介
动态代理的角色和静态代理的一样。但是动态代理的代理类是动态生成的而静态代理的代理类是提前写好的。
动态代理分为两类一类是基于接口动态代理JDK一类是基于类的动态代理CGLib。
2基于接口动态代理JDK
程序运行的过程中通过 JDK 提供代理技术动态的为某个类产生动态代理对象的过程。
开发代理对象的原则
代理对象不需要实现接口但是目标对象要实现接口否则不能用JDK动态代理。代理对象的生成是利用JDK的API动态的在内存中构建代理对象。动态代理也叫做 JDK代理、接口代理。
JDK 的动态代理需要了解两个类
核心 : InvocationHandler 调用处理程序 和 Proxy 代理 实现步骤在上面案例的基础上实现。
创建一个基于 JDK 的代理工具类 DynamicProxy 类
package cn.gc.spring03.proxy;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;/** 基于JDK的代理工具类*/
public class DynamicProxy {//被代理对象private Object target;public DynamicProxy(Object obj) {this.target obj;}//生成代理对象public Object getProxy() {//获取类加载器ClassLoader classLoader target.getClass().getClassLoader();//获取被代理对象实现的所有接口Class?[] interfaces target.getClass().getInterfaces();//增强功能代码编写的位置InvocationHandler invocationHandler new InvocationHandler() {Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {// 增强的功能System.out.println(args[0] 课程上课时间到了);// 通过反射执行目标方法Object invoke method.invoke(target, args);// 增强的功能System.out.println(args[0] 课程下课时间到了);return invoke;}};Object o Proxy.newProxyInstance(classLoader, interfaces, invocationHandler);return o;}
}
测试 Testpublic void test02() {Teacher teacher new TeacherA();DynamicProxy dynamicProxy new DynamicProxy(teacher);Teacher teacherProxy (Teacher) dynamicProxy.getProxy();teacherProxy.teachOnLine(Java);System.out.println(______________________);teacherProxy.teachOnLine©;}运行效果 3基于类的动态代理CGLib
开发代理对象的原则 代理对象无需和原始类对象实现相同的接口 代理对象和原始类对象要存在父子类关系
CGLib 的动态代理需要了解两个类
核心 : Enhancer 和 MethodInterceptor
实现步骤
创建一个 Aoo 类
package cn.gc.spring03.interfce.impl;public class Aoo {public String test01(String info){System.out.println(Aoo中的test01方法被调用。);return info;}
}创建一个基于 CGLib 的代理工具类 CglibProxy 类
package cn.gc.spring03.proxy;import org.springframework.cglib.proxy.Callback;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;import java.lang.reflect.Method;public class CglibProxy {private Object target;public CglibProxy(Object obj){this.targetobj;}public Object getProxy(){Enhancer enhancernew Enhancer();//设置类加载器enhancer.setClassLoader(CglibProxy.class.getClassLoader());//设置被代理对象enhancer.setSuperclass(target.getClass());//增强功能代码编写的位置MethodInterceptor methodInterceptornew MethodInterceptor() {Overridepublic Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {System.out.println(————-cglib log————–);Object invoke method.invoke(target, objects);System.out.println(————-cglib log————–);return invoke;}};enhancer.setCallback(methodInterceptor);//代理对象Object o enhancer.create();return o;}
}测试 Testpublic void test03() {Aoo aoonew Aoo();CglibProxy cglibProxy new CglibProxy(aoo);Aoo proxy (Aoo) cglibProxy.getProxy();String info proxy.test01(java);System.out.println(info info);}运行效果 4动态代理的优势
可以使得真实角色更加纯粹不再去关注一些公共的事情。公共的业务由代理来完成实现了业务的分工。公共业务发生扩展时变得更加集中和方便。一个动态代理一般代理某一类业务。一个动态代理可以代理多个类代理的是接口。 码文不易本篇文章就介绍到这里如果想要学习更多Java系列知识点击关注博主博主带你零基础学习Java知识。与此同时对于日常生活有困扰的朋友欢迎阅读我的第四栏目《国学周更—心性养成之路》学习技术的同时我们也注重了心性的养成。
- 上一篇: 台州模板网建站电子商务网站建设知识
- 下一篇: 台州市建设监理协会网站数码类网站名称
相关文章
-
台州模板网建站电子商务网站建设知识
台州模板网建站电子商务网站建设知识
- 技术栈
- 2026年04月20日
-
台州椒江网站制作公司开花店做网站
台州椒江网站制作公司开花店做网站
- 技术栈
- 2026年04月20日
-
台州建设局网站信息价wordpress 站点迁移
台州建设局网站信息价wordpress 站点迁移
- 技术栈
- 2026年04月20日
-
台州市建设监理协会网站数码类网站名称
台州市建设监理协会网站数码类网站名称
- 技术栈
- 2026年04月20日
-
台州市建设厅网站外包做网站的会给你什么
台州市建设厅网站外包做网站的会给你什么
- 技术栈
- 2026年04月20日
-
台州市椒江建设工程机械厂网站东莞网站设计制作网站
台州市椒江建设工程机械厂网站东莞网站设计制作网站
- 技术栈
- 2026年04月20日
