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

企业网站建设的要求oracle数据库网站开发

企业网站建设的要求,oracle数据库网站开发,网络推广服务合同范本,做土豆的视频在线观看网站目录 1、什么是代理模式#xff1f; 2、静态代理 3、动态代理 3.1 JDK动态代理类 3.2 CGLIB动态代理类 4、JDK动态代理和CGLIB动态代理的区别#xff1f; 1、什么是代理模式#xff1f; 定义#xff1a; 代理模式就是为其他对象提供一种代理以控制这个对象的访问。在某…目录 1、什么是代理模式 2、静态代理 3、动态代理 3.1 JDK动态代理类 3.2 CGLIB动态代理类 4、JDK动态代理和CGLIB动态代理的区别 1、什么是代理模式 定义         代理模式就是为其他对象提供一种代理以控制这个对象的访问。在某些情况下一个对象不适合或者不能直接引用另一个对象而代理对象就可以在客户端和目标对象之间起到中介的作用。类似于租房租户和房东之间现在不直接沟通找了中介来联系那么中介就是代理这种模式就是代理模式。         代理模式分为静态代理和动态代理。 2、静态代理 在静态代理中我们对目标对象的每个方法的增强都是手动完成的非常不方便比如接口一旦增加新方法目标对象和代理对象都要进行修改同时也麻烦需要对于每个目标类都单独写一个代理类类似于房东有很多套房子每套房子都要找一个中介来代理因此实际场景中静态代理的使用非常少。 1从JVM的层面上讲静态代理是在编译的时候就将接口、实现类、代理类等都变成了一个个实际的class文件。 模拟租户和房东之间的租房业务 静态代理的使用步骤 1创建一个接口和实现类——相当于房主现在要出租房 //定义接口 public interface SellHouseService {void sell(); } 不过房主有很多套房子现在只想出租房子一 //实现接口具体的房东要出租房子 public class SellHouseOneService implements SellHouseService{Overridepublic void sell() {System.out.println(SellHouseService...);} } 2创建一个代理类也实现这个接口 ——房主将房子一出租的任务交给中介不然中介也没有权限去给租户看房子。 //创建代理类 public class StaticProxy implements SellHouseService{//将目标对象注入到代理类然后在代理类的对应方法调用目标类中的对应方法private final SellHouseService sellHouseService;public StaticProxy(SellHouseService sellService){this.sellHouseService sellService;}Overridepublic void sell() {System.out.println(before...);sellHouseService.sell();System.out.println(after...);} } 3主函数 public class Main {public static void main(String[] args) {//创建目标对象房东SellHouseService service new SellHouseOneService();//创建代理对象中介SellHouseService proxy new StaticProxy(service);proxy.sell();} } 当我租第二套房子第三套的时候也要找一个代理...非常麻烦。这个时候我们就使用动态代理了。 3、动态代理 相比于静态代理动态代理更加灵活我们不用再针对每个目标类都单独去创建一个代理类了。 小Tips 1动态代理主要有两种JDK动态代理和CGLIB动态代理机制。 2其中Spring AOP的实现就依赖了动态代理。 3从JVM角度讲动态代理是在运行的时候动态生成类字节码并加载到JVM中。 4在Java动态dialing机制中InvocationHander接口和Proxy类是核心。 3.1 JDK动态代理类 JDK动态代理类的使用步骤 1定义接口及实现类同静态代理 2自定义InvocationHandler并重写invoke方法在invoke方法中调用被代理类的方法并定义一些处理逻辑 //自定义InvokeHandler并重写invoke方法 public class JDKInvocationHandler implements InvocationHandler {//目标对象就是被代理对象private Object target;public JDKInvocationHandler(Object target){this.target target;}//代理对象要运行的方法传递的实参Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//增强方法前置处理//1、安全检查System.out.println(安全检查);//2、记录日志System.out.println(记录日志);//3.时间统计开始System.out.println(记录开始时间);//4、在invoke方法中会通过反射调用被代理类的方法Object retVal method.invoke(target,args);//5、时间统计结束System.out.println(记录结束时间);return retVal;} } 3创建一个代理类并使用。 public class Main {public static void main(String[] args) {//创建代理对象SellHouseService target new SellHouseOneService();//创建一个代理类通过被代理类、被代理实现的接口、方法调用处理器来创建SellHouseService proxy (SellHouseService) Proxy.newProxyInstance(target.getClass().getClassLoader(),new Class[]{SellHouseService.class},new JDKInvocationHandler(target));proxy.sell();} } 小Tips 问如何为Java对象创建一个代理对象         java.lang.reflect.Proxy类提供了为对象产生代理对象的方法 1Public static Object newProxyInstanceClassLoader loader,Class? [ ] interfacesInvocationHandler hnewProxyInstance作用是生成一个代理对象。返回值就是代理 2这个方法一共有三个参数loader类加载器用于加载代理对象interfaces被代理类实现的一些接口还有实现了InvocationHanldler接口的对象。 3JDK动态代理的问题只能代理实现了接口的类因此使用CGLIB动态代理来解决。 4通过Proxy 类的 newProxyInstance() 创建的代理对象在调用方法的时候实际会调用到实现InvocationHandler 接口的类的 invoke()方法。 你可以在 invoke() 方法中自定义处理逻辑比如在方法执行前后做什么事情。  3.2 CGLIB动态代理类 CGLIBCode Generation Library允许我们在运行的时候对字节码进行修改和动态生成。CGLIB允许我们通过继承的方式实现代理。CGLIB动态代理机制中MethodIntercepor接口和Enhancer类是核心。在Spring AOP的设计中如果目标对象实现了接口则默认采用JDK动态代理否则使用CGLIB动态代理。 CGLIB动态代理类的使用步骤 1添加依赖 dependencygroupIdcglib/groupIdartifactIdcglib/artifactIdversion3.3.0/version/dependency 2自定义MethodInterceptor并重写Intercept方法intercept用于拦截增强被代理类的方法和JDK动态代理中的Invoke方法类似 public interface MethodInterceptor extends Callback{// 拦截被代理类中的⽅法public Object intercept(Object obj, java.lang.reflect.Method method, Object[] args,MethodProxy proxy) throws Throwable; } public class CGLIBInterceptor implements MethodInterceptor {//被代理对象private Object target;public CGLIBInterceptor(Object target){this.target target;}Overridepublic Object intercept(Object o, Method method, Object[] args, MethodProxy 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;} }3通过Enhancer类的create()创建代理类并使用。 public static void main(String[] args) {SellHouseService target new SellHouseOneService();SellHouseService proxy (SellHouseService) Enhancer.create(target.getClass(),new CGLIBInterceptor(target));proxy.sell();} 4、JDK动态代理和CGLIB动态代理的区别 1JDK 动态代理只能代理实现了接⼝的类或者直接代理接⼝⽽ CGLIB 可以代 理未实现任何接⼝的类。 2CGLIB 动态代理是通过⽣成⼀个被代理类的⼦类来拦截被代理类的⽅法调 ⽤因此不能代理声明为 final。 3性能: ⼤部分情况都是 JDK 动态代理更优秀随着 JDK 版本的升级这个优势更 加明显
http://www.hkea.cn/news/14435876/

相关文章:

  • 域名和网站的关系网站有些什么内容
  • 邢台wap网站建设网站已经申请了域名 接下来怎么
  • 专业建设外贸网站c语言编程软件
  • 课程网站模板湖州网
  • 医药类网站前置审批新手做自媒体从哪开始
  • 企业网站建设基本标准能看男女做那个的网站
  • 做网站那个公司好竞价托管推广代运营
  • 制作网页教程的方法我自己的网站怎么做关键词优化
  • 做中介最好用的网站企业网站开发背景及意义
  • 来个手机能看的网站2021做网站小编怎么样
  • 电子商务网站建设花费国外以紫色为背景的网站
  • 阿里云网站备案查询高端做网站价格
  • ps做网页怎么在网站上打开防蚊手环移动网站建设
  • 网站导航页设计qq网站建设
  • 网站策划专员网站建立的链接不安全怎么解决
  • 设计介绍人的网站北京商标注册公司
  • 如何规划电子商务网站互联网技术的特征
  • 购买域名后如何建设网站古典网站案例
  • 宝塔怎么做第二个网站免费的行情网站app入口
  • 统计局宣传工作总结 网站建设中国核工业二三建设有限公司待遇
  • asp网站如何打开网络营销推广方式包括
  • 温州网站搭建泰安房产网站
  • 泰安网站建设介绍网站做中秋专题怎么弄
  • 国内做网站俄语网站里做外贸shop
  • wordpress 转发北京seo专业团队
  • 网站定制报价表百度关键词排名查询工具
  • idea建设完整的网站凡科建站登录
  • 网站有利于seo的细节指定网站建设前期规划方案
  • 南阳seo网站建设费用企业网站下周
  • 企业进行网站建设的方式淮安市建设监理协会网站