代理模式

代理模式

拜拜、爱过 提交于 2019-11-29 20:57:07
一. 静态代理 代理类和委托类都实现接口,但是代理类的方法的具体实现是在委托类中实现的,代理类仅仅是调用委托类的方法,并在委托类方法调用之前或者之后或者出现异常时添加一些额外的功能。客户类只需获得一个有代理类实现接口的对象,使用该对象中的方法即可。 二. JDK动态代理 使用方式: Java在java.lang.reflect.proxy下实现了代理类。 首先委托类实现接口中的方法,然后需要定义一个类MyClass实现了InteceptorHandler接口,该接口中只有一个方法为 在MyClass类中将invoke方法实现其中的proxy为代理对象实例,method为当前proxy对象被代理的方法,args为被代理方法所需的参数。 创建好该InteceptorHandler的实现类后,接下来需要通过Proxy类下的newProxyInstance方法来创建代理类。 Loader为当前目标对象使用的类加载器,获取加载器的方法是固定的。Interfaces 指定当前目标对象实现的接口的类型,使用泛型方式确认类型 H 指定动态处理器,执行目标对象的方法时,会触发事件处理器的方法,即invoke方法。 动态代理实现的原理: 通过newProxyInstance方法创建一个代理类的字节码文件,并由jvm运行该文件创建一个代理类的对象并返回

js009-客户端检测

我们两清 提交于 2019-11-29 20:07:17
js009- 客户端检测 本章内容: 1、使用能力检测 2、用户代理检测的历史 3、选择检测方式 一般不使用客户端检测。 9.1 能力检测 也称特性检测。基本模式如下: if(object.propertyInQuestion){ // 使用object.propertyInQuestion } 9.1.1 更可靠的能力检测 能力检测丢想知道某个特性是否会按照适当的方式行事非常有用。 typeof做能力检测是比较可靠。 9.1.2能力检测,不是浏览器检测 9.2 怪癖检测 目标:识别浏览器的特殊行为。检测浏览器存在什么缺陷 9.3 用户代理检测 通过检测用户代理字符串来确定实际使用的浏览器。其优先级排在能力检测和(或)怪癖检测之后。 9.3.1 用户代理字符串的历史 9.3.2用户代理字符串检测技术 9.3.3完整的代码 9.3.4使用方法 原文地址:http://www.cnblogs.com/lal-fighting/p/5149464.html 来源: http://www.cnblogs.com/lal-fighting/p/5149464.html

[Javascript]客户端检测

纵然是瞬间 提交于 2019-11-29 20:05:23
客户端检测是一种行之有效的开发策略。但不到万不得已,就不要使用客户端检测。先设计通用的方案,然后根据浏览器之间的差异和各自的怪癖quirky,再使用特定于浏览器的技术增强该方案。 能力检测 Feature Detection 能力检测(又称特性检测)目标是识别浏览器的能力而不是识别特定的浏览器。只需根据浏览器支持的功能给出解决方案。 能力检测作为确定下一步解决方案的依据,而不是用它来判断用户使用的是什么浏览器。 基本模式: if( object.propertyInQuestion){ //使用 object.propertyInQuestion } 两个重要的概念: 第一个概念是先检测达成目的的最常用的特性。先检测最常用的特性,可以保证代码最优化,因为在多数情况下都可以避免测试多个条件。 第二个概念是必须测试实际要用到的特性。一个特性存在,不一定意味着另一个特性也存在。 更可靠的能力检测 确定一个对象是否支持排序,检测对象是否支持sort()方法。 //只检测了是否存在相应的方法 function isSortable(object){ return !!object.sort; } var result= isSortable({sort:true}); 检测某个属性是否存在并不能确定对象是否支持排序。,检测sort是不是一个函数。 function isSortable

客户端检测

瘦欲@ 提交于 2019-11-29 20:05:05
1、能力检测 基本概念 定义:最常用也最为人们广泛接受的客户端检测形式是能力检测(又称特性检测) 目标:不是识别特定的浏览器,而是识别浏览器的能力,,基本模式如下: if (object.propertyInQuestion){ //使用 object.propertyInQuestion } 举例: function getElement(id){ if (document.getElementById){ return document.getElementById(id); } else if (document.all){ return document.all[id]; } else { throw new Error("No way to retrieve element!"); } } 要理解能力检测,首先必须理解两个重要的概念: 先检测达成目的的最常用的特性 必须测试实际要用到的特性 function getWindowWidth(){ if (document.all){ //假设是 IE return document.documentElement.clientWidth; //错误的用法!!! } else { return window.innerWidth; } } 更可靠的能力检测 错误的能力检测: //不要这样做!这不是能力检测—

[Javascript]客户端检测

北战南征 提交于 2019-11-29 20:04:07
本文地址: http://www.cnblogs.com/egger/archive/2013/04/26/3045285.html 客户端检测是一种行之有效的开发策略。但 不到万不得已,就不要使用客户端检测。 先设计通用的方案,然后根据浏览器之间的差异和各自的怪癖quirky,再使用特定于浏览器的技术增强该方案。 能力检测 Feature Detection 能力检测(又称特性检测)目标是 识别浏览器的能力而不是识别特定的浏览器。只需根据浏览器支持的功能给出解决方案。 能力检测作为确定下一步解决方案的依据,而不是用它来判断用户使用的是什么浏览器。 基本模式: if( object.propertyInQuestion){ //使用 object.propertyInQuestion } 两个重要的概念: 第一个概念是先检测达成目的的最常用的特性。先检测最常用的特性,可以保证代码最优化,因为在多数情况下都可以避免测试多个条件。 第二个概念是必须测试实际要用到的特性。一个特性存在,不一定意味着另一个特性也存在。 更可靠的能力检测 确定一个对象是否支持排序,检测对象是否支持sort()方法。 //只检测了是否存在相应的方法 function isSortable(object){ return !!object.sort; } var result= isSortable({sort

Spring之AOP原理_动态代理

坚强是说给别人听的谎言 提交于 2019-11-29 19:46:13
面向方面编程( Aspect Oriented Programming ,简称 AOP )是一种声明式编程( Declarative Programming )。声明式编程是和命令式编程( Imperative Programming )相对的概念。我们平时使用的编程语言,比如 C++ 、 Java 、 Ruby 、 Python 等,都属命令式编程。命令式编程的意思是,程序员需要一步步写清楚程序需要如何做什么( How to do What )。声明式编程的意思是,程序员不需要一步步告诉程序如何做,只需要告诉程序在哪些地方做什么( Where to do What )。比起命令式编程来,声明式编程是在一个更高的层次上编程。声明式编程语言是更高级的语言。声明式编程通常处理一些总结性、总览性的工作,不适合做顺序相关的细节相关的底层工作。 如果说命令式编程是拼杀在第一线的基层工作人员,声明式编程就是总设计师、规则制定者。声明式编程语言的概念,和领域专用语言( Domain Specific Language ,简称 DSL )的概念有相通之处。 DSL 主要是指一些对应专门领域的高层编程语言,和通用编程语言的概念相对。 DSL 对应的专门领域( Domain )一般比较狭窄,或者对应于某个行业,或者对应于某一类具体应用程序,比如数据库等。 最常见的 DSL

面试中的被问到Spring,我们该怎么去回答

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-29 19:36:42
今天只谈一下我们在面试中的如果面试官问到Spring,你应该怎么去回答,来获取面试官的青睐。在我的印象中,Spring框架可以说是Java世界里面最为成功的框架了,在企业的实际的应用里面,大部分的企业架构都是基于Spring框架的,它的成功来自于他的理念而不是技术,最为核心的理念是IOC和AOP。接下来我们就来讲讲这个Spring吧! Spring的历史 Spirng从2004年第一个版本至今已经有十多年了,Spring的出现是因为当时Sun公司EJB的失败,因为当时的EJB2的时代,那配置文件可是非常的多呀,亏了我没在那个时代去做开发,去写代码,不然我估计自己可能怎么凉的都不知道。 而在之后的EJB3客服了配置方面的冗余,但是对于JAVAEE开发来说,更为致命的是对EJB容器的依赖,也就是EJB智能运行在EJB容器中,EJB容器的笨重,让很多企业感到熟手无策。 正是因为EJB的没落,导致了Spring的崛起,在Spring中,它会认为一切Java的类都是资源,而自愿都是BEan,容纳这些Bean的Spring所提供的IOC容器,所以Spring是一种基于Bean的编程。 面试问法一:什么是Spring 回答:Spring是一个J2EE的框架,这个框架提供了对轻量级IOC的良好支持,同时也提供了对AOP技术非常好的封装,相比于其他的框架,Spring框架的设计更加模块化

CAS5 代理模式

末鹿安然 提交于 2019-11-29 18:29:23
一、什么是CAS的代理认证   在我们的项目中,有这样一个场景:有两个服务holiday(节假日服务)和mainWeb(集成服务),这两个服务都集成了CAS,所有的请求都要经过CAS Server的认证。由于mainWeb内部会去调用holiday的服务,但是mainWeb的请求会被holiday配置的CAS拦截器AuthenticationFilter拦截并重定向到CAS Server。这样我们的mainWeb就没法直接访问holiday服务。通过查阅官方文档,前辈博客发现,CAS的代理模式可以解决这个问题。 二、CAS代理模式(CAS Proxy)原理剖析   CAS Proxy代理模式的主要原理如下:mainWeb(代理端)请求holiday(被代理端),mainWeb首先通过CAS Server的认证,然后向CAS Server申请一个针对holiday的proxy ticket,之后在访问holiday的请求中将proxy ticket以参数ticket的形式传递过去,holiday的AuthenticationFilte拦截到该请求,但是发现这个请求携带了ticket参数,于是交给后续的Ticket Validation Filter处理。Ticket Validation Filter将会传递该ticket到CAS Server进行认证,由于该ticket是由Cas

《Designing.Data-Intensive.Applications》笔记 五

陌路散爱 提交于 2019-11-29 17:17:37
第十章 批处理 三种不同类型的系统 : 服务(在线系统):服务等待客户的请求或指令到达。每收到一个,服务会试图尽快处理它,并发回一个响应。响应时间通常是服务性能的主要衡量指标。 批处理系统(离线系统):一个批处理系统有大量的输入数据,跑一个job来处理它,并生成一些输出数据,这往往需要一段时间(几分钟到几天),所以通常不会有用户等待作业完成。一般批处理会定期运行。批处理的主要性能衡量标准通常是吞吐量。本章讨论的就是批处理。 流处理(准实时系统):介于在线和离线之间。像批处理系统一样,流处理消费输入并产生输出(并不需要响应请求)。但是,流式作业在事件发生后不久就会对事件进行操作,而批处理作业需等待固定的一组输入数据。这种差异使流处理系统比批处理系统具有更低的延迟。 MapReduce是一种批处理算法 MapReduce和分布式文件系统 MapReduce有点像Unix工具,但分布在数千台机器上。它接收一个或多个输入,并产生一个或多个输出。 MapReduce的作业执行 Mapper Mapper会在每条输入记录上调用一次,其工作是从输入记录中提取键值对。对于每个输入,它可以生成任意数量的键值对(包括None)。两次输入记录之间,它不会保留任何状态,因此每个记录都是独立处理的。 Reducer The MapReduce framework takes the key-value

Spring消息之STOMP

核能气质少年 提交于 2019-11-29 17:05:04
一、STOMP 简介 直接使用WebSocket(或SockJS)就很类似于使用TCP套接字来编写Web应用。因为没有高层级的线路协议(wire protocol),因此就需要我们定义应用之间所发送消息的语义,还需要确保连接的两端都能遵循这些语义。 就像HTTP在TCP套接字之上添加了请求-响应模型层一样,STOMP在WebSocket之上提供了一个基于帧的线路格式(frame-based wire format)层,用来定义消息的语义。 与HTTP请求和响应类似,STOMP帧由命令、一个或多个头信息以及负载所组成。例如,如下就是发送数据的一个STOMP帧: >>> SEND transaction:tx-0 destination:/app/marco content-length:20 {"message":"Marco!"} 在这个例子中,STOMP命令是send,表明会发送一些内容。紧接着是三个头信息:一个表示消息的的事务机制,一个用来表示消息要发送到哪里的目的地,另外一个则包含了负载的大小。然后,紧接着是一个空行,STOMP帧的最后是负载内容。 二、服务端实现 1、启用STOMP功能 STOMP 的消息根据前缀的不同分为三种。如下,以 /app 开头的消息都会被路由到带有@MessageMapping 或 @SubscribeMapping 注解的方法中;以/topic