如何独立开发网站?上海高端网站建设公司提供编程指导吗?
摘要:自己做网站怎么编代码,上海高端网站设计公司,学做披萨的网站,hfs网络文件服务器可以做网站导航:【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud
自己做网站怎么编代码,上海高端网站设计公司,学做披萨的网站,hfs网络文件服务器可以做网站导航#xff1a; 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线设计模式牛客面试题 目录
1、代理模式的基本介绍
2、静态代理
3、JDK动态代理
4、Cglib 代理
5、代理模式 的变体#xff08;应用场景#xff09; 1、… 导航 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线设计模式牛客面试题 目录
1、代理模式的基本介绍
2、静态代理
3、JDK动态代理
4、Cglib 代理
5、代理模式 的变体应用场景 1、代理模式的基本介绍
代理模式为一个对象提供一个替身以控制对这个对象的访问。即通过代理对象访问目标对象
代理模式是结构型设计模式用于描述对象之间的组合关系。
好处可以在目标对象实现的基础上增强额外的功能操作即扩展目标对象的功能
被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象代理时对目标对象进行安全控制
我们并不希望客户端直接调用目标对象而是通过代理对象对目标对象实现安全控制或增强功能。所以我们客户端直接依赖代理对象代理对象依赖目标对象 代理模式有不同的形式主要有三种静态代理、JDK动态代理、Cglib 代理
静态代理
目标对象与代理对象实现租同的接口或继承相同的父类在编译时生成代理对象。
目标对象实现代理接口代理对象实现并聚合代理接口重写方法编写增强后逻辑。
JDK动态代理
通过Java反射机制在运行时动态地在内存中生成代理对象。 目标对象需要实现代理接口。
目标对象实现代理接口代理工厂通过Proxy类的静态方法newProxyInstance()利用反射机制返回代理对象实例。
newProxyInstance()三个参数目标对象的类加载器、目标对象的接口、实现InvocationHandler接口并重写invoke()方法编写代理对象逻辑。
应用Spring AOP采用了动态代理的方式在运行时动态的创建代理对象来实现增强。
Cglib 代理
在内存中构建一个子类对象从而实现对目标对象功能扩展。目标对象不需要实现代理接口。底层是通过使用ASM框架转换字节码并生成新的类。
代理工厂类实现MethodInterceptor接口并重写intercept()方法编写代理逻辑通过cglib包的Enhancer类设置父类字节码文件和创建子类对象来返回代理对象实例。
ASM框架是一个强大的Java字节码操作框架可以让程序员通过代码生成和转换现有字节码来操作Java类。ASM可以直接生成字节码也可以通过访问现有字节码来修改它。 2、静态代理
静态代理在使里时需要定义接口或者父类目标对象与代理对象实现租同的接口或继承相同的父类。
实现方式目标对象实现代理接口代理对象实现并聚合代理接口重写方法编写增强后逻辑。
优缺点
优点在不修改目标对象的功能前提下能通过代理对象对目标功能扩展
缺点因为代理对象需要与目标对象实现一样的接口所以会有很多代理类。耦合性较高一旦接口增加方法目标对象与代理对象都要维护 案例 1定义一个接口ITeacherDao 2目标对象TeacherDao实现接口ITeacherDao 3使用静态代理方式就需要在代理对象TeacherDaoProxy中也实现ITeacherDao 4调用的时候通过调用代理对象的方法来调用目标对象 5特别提醒代理对象与目标对象要实现相同的接口然后通过调用相同的方法来调用目标对象的方法 UML 类图 核心代码 /*** 代理接口*/
public interface ITeacherDao {void teach(); //代理对象和原始对象重写这个方法
}
/*** 目标对象即被代理对象。实现代理借口*/
public class TeacherDao implements ITeacherDao {Overridepublic void teach() {System.out.println(老师授课中...);}
}
/*** 代理对象。
