当前位置: 首页 > news >正文

中英文网站是怎么做的渭南网站建设远景

中英文网站是怎么做的,渭南网站建设远景,wordpress文章不在首页显示,国外 上海网站建设目录 代理模式 代理模式的组成 代理模式的作用 静态代理 静态代理实现步骤: 静态代理的缺点 动态代理 动态代理的实现 JDK 动态代理#xff08;接口代理#xff09; jdk动态代理核心 JDK 动态代理类实现步骤: CGLIB动态代理 CGLIB动态代理的核心 CGLIB 动态代理…目录 代理模式 代理模式的组成 代理模式的作用 静态代理 静态代理实现步骤: 静态代理的缺点 动态代理 动态代理的实现 JDK 动态代理接口代理 jdk动态代理核心 JDK 动态代理类实现步骤: CGLIB动态代理 CGLIB动态代理的核心 CGLIB 动态代理类实现步骤 JDK 动态代理和 CGLIB 动态代理对⽐ 代理模式 定义为其他对象提供⼀种代理以控制对这个对象的访问。在某些情况下⼀个对 象不适合或者不能直接引⽤另⼀个对象⽽代理对象可以在客户端和⽬标对象之间 起到中介的作⽤。 代理模式分为静态代理和动态代理。 代理模式的组成 代理模式一般由三个角色组成 Subject抽象角色声明了真实主题和代理主题的共同接口。 Proxy代理角色具体的代理类其内部持有对RealSubject的引用因此具备完全的对RealSubject的代理权。客户端调用代理对象的方法同时也调用被代理对象的方法但是会在代理对象前后增加一些代码处理。 RealSubject真实角色实现了真实的业务操作。 增强就是扩展对象功能这里就是在代理的基础上可以添加自己的代码。 代理模式的作用 隔离作用在某些情况下一个客户类不想或者不能直接引用一个委托对象而代理类对象可以在客户类和委托对象之间起到中介的作用其特征是代理类和委托类实现相同的接口。开闭原则代理类除了是客户类和委托类的中介之外我们还可以通过给代理类增加额外的功能来扩展委托类的功能这样做我们只需要修改代理类而不需要再修改委托类符合代码设计的开闭原则。 静态代理 静态代理中我们对⽬标对象的每个⽅法的增强都是⼿动完成的⾮常不灵活⽐ 如接⼝⼀旦新增加⽅法⽬标对象和代理对象都要进⾏修改且麻烦(需要对每个 ⽬标类都单独写⼀个代理类。在jvm上来说静态代理在编译时就将接口、实现类、代理类这些都变成了一个个实际的 class 文件。 静态代理实现步骤: 定义⼀个接⼝及其实现类创建⼀个代理类同样实现这个接⼝将⽬标对象注⼊进代理类然后在代理类的对应⽅法调⽤⽬标类中的对应方法。 这样的话我们就可以通过代理类屏蔽对⽬标对象的访问并且可以在⽬标⽅法执 ⾏前后做⼀些⾃⼰想做的事情。 定义接口抽象接口 public interface PayService {void pay(); } 实现接⼝实现类 public class AliPayService implements PayService {Overridepublic void pay() {System.out.println(ali pay...);} }创建代理类并同样实现支付接口代理类 public class StaticProxy implements PayService{private final PayService payService;public StaticProxy(PayService payService) {this.payService payService;}Overridepublic void pay() {System.out.println(before...);payService.pay();System.out.println(after...);} } 使用 public class Main {public static void main(String[] args) {PayService service new AliPayService();PayService proxy new StaticProxy(service);proxy.pay();} }静态代理的缺点 上边的代码我们可以看出代理类和实现类都实现了抽象接口这也是静态代理的一个前提就是实现类和代理类要是实现同一个接口。 而且静态代理提前写好了会占用内存而且代理每个对象的每个增强都是自己手写的代码量也越来越大我们想要减少代码量并且想要在我们调用的时候代理再去创建。因此有了动态代理。 动态代理 对比于静态代理来说动态代理更加灵活。我们不需要针对每个⽬标类都单独创建 ⼀个代理类并且也不需要我们必须实现接⼝我们可以直接代理实现类( CGLIB 动态代理机制)。 从 JVM ⻆度来说动态代理是在运⾏时动态⽣成类字节码并加载到 JVM 中 的。 动态代理在我们日常开发中使用的相对较少但是在框架中的几乎是必用的一门技术。学会了动态代理之后对于我们理解和学习各种框架的原理也非常有帮助。 动态代理的实现 JDK 动态代理 CGLIB 动态代理等。 JDK 动态代理接口代理 jdk动态代理核心 在 Java 动态代理机制中 InvocationHandler 接⼝和 Proxy 类是核⼼。 Invocationhandler这是一个很简单的接口里面就定义了一个方法invoke(). 这个invoke方法是最终代理类代理方法的实现 . public interface InvocationHandler {public Object invoke(Object proxy, Method method, Object[] args)throws Throwable; } invoke()方法有下面三个参数 proxy :动态生成的代理类method : 与代理类对象调用的方法相对应args : 当前 method 方法的参数 Proxy他的作用主要用来创建一个代理类。最常用的方法就是newProxyInstance() public static Object newProxyInstance(ClassLoader loader,Class?[] interfaces,InvocationHandler h) 这个方法一共有 3 个参数 loader :类加载器用于加载代理对象。interfaces : 被代理类实现的一些接口h : 实现了 InvocationHandler 接口的对象 JDK 动态代理类实现步骤: 定义⼀个接⼝及其实现类 ⾃定义 InvocationHandler 并重写invoke⽅法在 invoke ⽅法中我们会调⽤ 原⽣⽅法被代理类的⽅法并⾃定义⼀些处理逻辑 通过 Proxy.newProxyInstance() ⽅法创建代理对象 定义代理类 import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class JDKInvocationHandler implements InvocationHandler {//⽬标对象即就是被代理对象private Object target;public JDKInvocationHandler(Object target) {this.target target;}//proxy代理对象Overridepublic Object invoke(Object proxy, Method method, Object[] args) throw s Throwable {//1.安全检查System.out.println(安全检查);//2.记录⽇志System.out.println(记录⽇志);//3.时间统计开始System.out.println(记录开始时间);//通过反射调⽤被代理类的⽅法Object retVal method.invoke(target, args);//4.时间统计结束System.out.println(记录结束时间);return retVal;} } 创建一个代理对象并使用 public static void main(String[] args) {PayService target new AliPayService();//创建⼀个代理类通过被代理类、被代理实现的接⼝、⽅法调⽤处理器来创建PayService proxy (PayService) Proxy.newProxyInstance(target.getClass().getClassLoader(),new Class[]{PayService.class},new JDKInvocationHandler(target));proxy.pay();} CGLIB动态代理 JDK 动态代理有⼀个最致命的问题是其只能代理实现了接⼝的类。 为了解决这个问题我们可以⽤ CGLIB 动态代理机制来避免。cglib 是针对类来实现代理的他的原理是对指定的目标类生成一个子类并通过回调的方式来实现增强但因为采用的是继承所以不能对 final 修饰的类进行代理。 CGLIB(Code Generation Library)是⼀个基于ASM的字节码⽣成库它允许我们 在运⾏时对字节码进⾏修改和动态⽣成。CGLIB 通过继承⽅式实现代理。很多知名的开源框架都使⽤到了CGLIB 例如 Spring 中的 AOP 模块中如果⽬标对象 实现了接⼝则默认采⽤ JDK 动态代理否则采⽤ CGLIB 动态代理。 CGLIB动态代理的核心 在 CGLIB 动态代理机制中 MethodInterceptor 接⼝和 Enhancer 类是核⼼。 你需要⾃定义 MethodInterceptor 并重写 intercept ⽅法intercept ⽤于拦截增 强被代理类的⽅法。 public interface MethodInterceptor extends Callback{// 拦截被代理类中的⽅法public Object intercept(Object obj, java.lang.reflect.Method method, Ob ject[] args,MethodProxy proxy) throws Throwable; }intercept()方法有4个参数 obj : 被代理的对象需要增强的对象 method : 被拦截的⽅法需要增强的⽅法 args : ⽅法⼊参 proxy : ⽤于调⽤原始⽅法 CGLIB 动态代理类实现步骤 定义⼀个类 ⾃定义 MethodInterceptor 并重写 intercept ⽅法intercept ⽤于拦截增强 被代理类的⽅法和 JDK 动态代理中的 invoke ⽅法类似 通过 Enhancer 类的 create()创建代理类 添加依赖 和JDK 动态代理不同, CGLIB(Code Generation Library) 实际是属于⼀个开源项 ⽬如果你要使⽤它的话需要⼿动添加相关依赖。 dependencygroupIdcglib/groupIdartifactIdcglib/artifactIdversion3.3.0/version /dependency⾃定义 MethodInterceptor⽅法拦截器 import org.springframework.cglib.proxy.MethodInterceptor; import org.springframework.cglib.proxy.MethodProxy; import java.lang.reflect.Method; public class CGLIBInterceptor implements MethodInterceptor {//被代理对象private Object target;public CGLIBInterceptor(Object target){this.target target;}Overridepublic Object intercept(Object o, Method method, Object[] args, Method Proxy methodProxy) throws Throwable {//1.安全检查System.out.println(安全检查);//2.记录⽇志System.out.println(记录⽇志);//3.时间统计开始System.out.println(记录开始时间);//通过cglib的代理⽅法调⽤Object retVal methodProxy.invoke(target, args);//4.时间统计结束System.out.println(记录结束时间);return retVal;} }创建代理类并使用 import org.springframework.cglib.proxy.Enhancer; public static void main(String[] args) {PayService target new AliPayService();PayService proxy (PayService) Enhancer.create(target.getClass(),new CGLIBInterceptor(target));proxy.pay();}JDK 动态代理和 CGLIB 动态代理对⽐ 1. JDK 动态代理只能代理实现了接⼝的类或者直接代理接⼝⽽ CGLIB 可以代 理未实现任何接⼝的类。 2. JDK 动态代理实现InvocationHandler重写invoke方法通过生成被代理类的子类来增强代码。CGLIB 动态代理是通过实现MethodInterceptor重写intercept方法⽣成⼀个被代理类的⼦类来拦截被代理类的⽅法调用因此不能代理声明为 final。 性能: ⼤部分情况都是 JDK 动态代理更优秀随着 JDK 版本的升级这个优势更 加明显。 补充一点 Spring代理选择 1. proxyTargetClass 为false, ⽬标实现了接⼝, ⽤jdk代理 2. proxyTargetClass 为false, ⽬标未实现接⼝, ⽤cglib代理 3. proxyTargetClass 为true, ⽤cglib代理
http://www.zqtcl.cn/news/787370/

相关文章:

  • 网站本地建设seo排名赚app多久了
  • 邢台手机网站建设信息超链接html代码
  • wordpress 代码模块昆明seo和网络推广
  • 匈牙利网站后缀沛县做网站xlec
  • 企业网站建设的成本国内做网站建设最好的公司是
  • 威海做企业网站云南建筑工程网
  • 旅游网站建设报价网站空间管理信息
  • app展示网站手机端app开发公司
  • 在湖南建设人力资源网站wordpress widget
  • 英文网站建站山东做网站用虚拟主机还是服务器
  • 网站设计佛山顺德投资公司注册条件和要求
  • 肇庆网站优化建设淄博网站建设优惠臻动传媒
  • 电子商务网站模板 html服装网站栏目调研
  • 抚州市做棋牌网站邯郸信息港聊天室
  • 李静做的化妆品网站树莓派lamp WordPress
  • 建站之星网站建设系统个人网站有什么外国广告做
  • 残联网站建设概况专业产品画册设计公司
  • 德尔普的网站建设的价格windows2008做网站
  • 画品展现手机网站短网址生成器有哪些
  • 如何做好网站推广营销网站 需求
  • 济宁做网站大约多少钱做设计兼职的网站有哪些
  • 教务系统网站开发方法网站建设在哪里
  • 房产网站如何做手机在网上怎么创建自己的网站
  • 金华网站建设luopan公司网站模板图片
  • 建个购物网站网站建设公司合同
  • 建设银行企业版网站网站里的动态是如何制作
  • 360网站建设的目标是什么微信哪个公司开发
  • c++可以做网站吗极验 wordpress 表单
  • 电脑做系统都是英文选哪个网站找外贸客户的联系方式软件
  • 商城网站建设咨询建工社官网