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

怎么访问域名网站百度权重1是什么意思

怎么访问域名网站,百度权重1是什么意思,公司简介模板免费下载完整版免费,怎样查看网站是用什么cms_做的代理模式 在Java中代理模式是一种设计模式,是通过代理类来代替原始的对象,可以在不改变原始对象的基础上,对它进行扩展(新增一些新功能)。在目标方法的执行的执行前后添加一些自定义的方法。 静态代理 步骤&#xff1a…

代理模式

在Java中代理模式是一种设计模式,是通过代理类来代替原始的对象,可以在不改变原始对象的基础上,对它进行扩展(新增一些新功能)。在目标方法的执行的执行前后添加一些自定义的方法。

静态代理

步骤:
1.创建一个接口以及它的实现类
2.创建它的代理类实现该接口(重写接口中的方法,自定义一些新功能)
3.在代理类中注入目标类,并且调用代理类中的相关方法。
具体实现如下:
(1.)接口和其实现类

public interface SsSercive {void say(String message);
}

实现类

public class ImpService implements SsSercive {public void say(String message){System.out.println("信息:"+message);}
}

(2)代理类[也要实现该接口,并重写接口中的新方法,自定义新功能]

public class ProxyImpl implements SsSercive {private final SsSercive service;//构造器public ProxyImpl(SsSercive service){this.service=service;}@Overridepublic void say(String message) {System.out.println("操作前可以添加一些方法");service.say(message);System.out.println("操作后面也可以添加一些操作");}
}

(3)真正实现

public class Main {public static void main(String[] args) {SsSercive service=new ImpService();//在代理类中调用目标类ProxyImpl proxy=new ProxyImpl(service);//调用代理类中的相关方法proxy.say("hello world");}
}

运行结果:
在这里插入图片描述

总结:
在静态代理中,对目标类的每个方法的增强都是手动的(因为代理类实现接口要重写各个方法),一个目标类对应一个代理类,因此十分不灵活,扩展性差。
从JVM角度来说,静态编译在接口中就将接口类、实现类、代理类转化成为class文件。

动态代理

动态代理不需要为每一个目标类创建一个代理类,也可以不实现接口(CGLIB动态代理不需要实现接口)。
从JVM角度来看,动态代理是在运行时生成类字节码,并且加载到JVM中。

JDK动态代理

JDK动态代理还是需要实现接口类Invocation,核心是Proxy代理类
(1.)接口类

public interface SsSercive {void say(String message);void send(String name);
}

实现类

public class ImpService implements SsSercive {@Overridepublic void say(String message){System.out.println("信息:"+message);}@Overridepublic void send(String name) {System.out.println("发送:"+name);}
}

(2)代理类

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
//代理类实现InvocationHandler接口
public class DebugInvocationHandler implements InvocationHandler {private Object target;public DebugInvocationHandler(Object target){this.target=target;}@Override/*proxy:是动态代理生成的代理类method:调用的相关方法args:调用方法的相关参数*/public Object invoke(Object proxy, Method method,Object[] args) throws InvocationTargetException, IllegalAccessException {System.out.println("方法之前可以添加一些功能:"+method.getName());//动态代理调用的是invoke方法,invoke方法代替我们去调用原方法Object result=method.invoke(target,args);System.out.println("方法之后可以添加一些功能:"+method.getName());return result;}
}

(3)代理对象的工厂类

import java.lang.reflect.Proxy;
public class JdkProxyFactory {
//getProxy方法的本质是调用Proxy.newProxyInstance( ),获取某个类的代理对象public static Object getProxy(Object target){return Proxy.newProxyInstance(target.getClass().getClassLoader(),//类加载器target.getClass().getInterfaces(),//代理对象实现的接口new DebugInvocationHandler(target)//自定义实现的Invocation接口);}
}

(4)实际使用

public class Main {public static void main(String[] args) {SsSercive service=(SsSercive) JdkProxyFactory.getProxy(new ImpService());service.send("hello World");service.say("我是张三");}
}

(5)运行结果
在这里插入图片描述

CGLIB动态代理

(1)引入依赖
说明:Spring Boot 的 parent POM(如 spring-boot-starter-parent)已经为所有常用 Spring 模块定义好了兼容版本。显式指定版本可能导致找不到依赖或版本冲突,所以可以不用显示指定版本。

<dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></dependency>

(2)目标类

public class ImpService  {public void send(String name) {System.out.println("发送:"+name);}
}

(3)自定义方法拦截器

mport org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;import java.lang.reflect.Method;public class DebugMethodInterceptor implements MethodInterceptor {@Overridepublic Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {//调用方法之前,我们可以添加自己的操作System.out.println("before method " + method.getName());Object object = methodProxy.invokeSuper(o, args);//调用方法之后,我们同样可以添加自己的操作System.out.println("after method " + method.getName());return object;}}

(4)代理类

import org.springframework.cglib.proxy.Enhancer;public class CglibProxyFactory {public static Object getProxy(Class<?> clazz) {// 创建动态代理增强类Enhancer enhancer = new Enhancer();// 设置类加载器enhancer.setClassLoader(clazz.getClassLoader());// 设置被代理类enhancer.setSuperclass(clazz);// 设置方法拦截器enhancer.setCallback(new DebugMethodInterceptor());// 创建代理类return enhancer.create();}
}

(5)使用

 public static void main(String[] args) {ImpService SmsService = (ImpService) CglibProxyFactory.getProxy(ImpService.class);SmsService.send("java");

(6)运行结果
在这里插入图片描述

JDK动态代理与CGLIB动态代理的区别

(1)JDK动态代理只能直接代理接口类或是代理实现接口的类,
CGLIB动态代理可以代理不实现任何接口的类。
(2)CGLIB在运行时生成代理类的子类,不需要通过实现接口,因此不能代理声明为final的类。

动态代理与静态代理的区别

(1)JVM角度:静态代理在编译时就将接口、实现类、代理类生成class文件,
而动态代理在运行时动态生成类字节码,并加载到jvm中。
(2)动态代理要比静态代理更加灵活,不用必须实现接口,可直接代理。不用针对每个目标类实现一个代理类。对于目标类中方法的改动,静态代理需要对代理类、目标对象进行修改,十分麻烦。

http://www.dtcms.com/wzjs/65809.html

相关文章:

  • 怎么做自己的公司网站放在百度河南网站推广电话
  • 宿迁企业网站设计阿里云域名查询
  • 网站建设微信商城开发精品成品网站源码
  • ps图做ppt模板下载网站百度 营销推广怎么收费
  • 南京网站建设方案seo快速排名利器
  • 怎么改网站关键词深圳谷歌seo推广
  • 做盗版系统网站会不会网络推广公司电话
  • 流行网站开发框架在线bt种子
  • 怎么用手机做钓鱼软件或者网站怎样在百度打广告
  • hao123网址之家设为主页抖音seo公司
  • 南宁网站建设推广服务合肥今天的最新消息
  • 电商培训在线课程网络优化app哪个好
  • 彩票引流推广方法seoer是什么意思
  • myeclipse做网站更改名字软件开发定制
  • 做公务员试题的网站跨境电商平台
  • 个人档案网站该怎么做网络营销型网站
  • 极简 单页面网站模板seo查询爱站
  • 外贸平台有哪些小网站广州快速排名
  • 阿里云多网站网络营销活动策划
  • 襄阳seo站内优化国内网络营销公司排名
  • 锦州网站制作公司个人模板建站
  • 西安哪里可以做公司网站seo技术助理
  • 淘宝购物网站的建设微信营销管理软件
  • 做微商哪个网站比较好爱站网站排名查询工具
  • 高校档案网站建设的目的是什么意思关键词看片
  • wordpress微信群发布平台优化方案模板
  • 如何做好商务网站的运营怎么做百度网址大全下载
  • 站内营销推广的案例百度搜索排行榜前十名
  • 最好的网站建设公司哪家好在百度怎么创建自己的网站
  • 手机怎么制作微信公众号宁波正规优化seo软件