代理模式

设计模式 结构型---代理模式

戏子无情 提交于 2019-12-30 00:09:48
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、代理模式基本介绍 代理模式为一个对象提供一个替身,以控制这个对象的访问。即通过代理模式访问目标对象。这样做的好处就是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能; 被代理的对象可以是远程控制的对象,创建开销量大的对象或者需要安全控制的对象; 代理模式有三种模式:静态代理、动态代理(JDK代理、接口代理)和Cglib代理(可以在内存中动态的创建对象,而不需要实现接口,他是属于动态代理的范畴)。 二、代理有以下四类 远程代理(Remote Proxy):控制对远程对象(不同地址空间)的访问,它负责将请求及其参数进行编码,并向不同地址空间中的对象发送已经编码的请求。 虚拟代理(Virtual Proxy):根据需要创建开销很大的对象,它可以缓存实体的附加信息,以便延迟对它的访问,例如在网站加载一个很大图片时,不能马上完成,可以用虚拟代理缓存图片的大小信息,然后生成一张临时图片代替原始图片。 保护代理(Protection Proxy):按权限控制对象的访问,它负责检查调用者是否具有实现一个请求所必须的访问权限。 智能代理(Smart Reference):取代了简单的指针,它在访问对象时执行一些附加操作:记录对象的引用次数;当第一次引用一个对象时,将它装入内存;在访问一个实际对象前

Jetty9 源码初解(1)——HTTP前传

ⅰ亾dé卋堺 提交于 2019-12-29 16:05:51
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 转自: http://blog.csdn.net/gueter/archive/2007/03/08/1524447.aspx Author :Jeffrey 引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。 HTTP协议的主要特点可概括如下: 1.支持客户/服务器模式。 2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。 3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。 4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力

Java动态代理之JDK实现和CGlib实现

大憨熊 提交于 2019-12-29 14:31:53
一:代理模式(静态代理) 代理模式是常用设计模式的一种,我们在软件设计时常用的代理一般是指静态代理,也就是在代码中显式指定的代理。 静态代理由 业务实现类、业务代理类 两部分组成。业务实现类 负责实现主要的业务方法,业务代理类负责对调用的业务方法作拦截、过滤、预处理,主要是在方法中首先进行预处理动作,然后调用业务实现类的方法,还可以规定调用后的操作。我们在需要调用业务时,不是直接通过业务实现类来调用的,而是通过业务代理类的同名方法来调用被代理类处理过的业务方法。 静态代理的实现: 1:首先定义一个接口,说明业务逻辑。 package net.battier.dao; /** * 定义一个账户接口 * @author Administrator */ public interface Count { // 查询账户 public void queryCount(); // 修改账户 public void updateCount(); } 2:然后,定义业务实现类,实现业务逻辑接口 import net.battier.dao.Count; /** * 委托类(包含业务逻辑) * * @author Administrator * */ public class CountImpl implements Count { @Override public void queryCount

spring AOP详解三

流过昼夜 提交于 2019-12-29 14:30:57
CGLib采用非常底层的字节码技术,可以为一个类创建子类,并在子类中采用方法拦截的结束拦截所有父类方法的调用,并顺势织入横切逻辑。我们采用CGLib技术可以编写一个可以为任何类创建织入横切逻辑代理对象的代理创建器,下面看一个使用CGLib代理技术实现横切的一个例子: 1.CglibProxy.java package spring.aop.demo2; import java.lang.reflect.Method; import spring.aop.demo1.PerformanceMonitor; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; public class CglibProxy implements MethodInterceptor { // private static CglibProxy proxy = new CglibProxy(); private Enhancer enhancer = new Enhancer(); public Object getProxy(Class clazz) { enhancer.setSuperclass(clazz);//

Spring:AOP, 面向切面编程,JDK的动态代理,CGLIB代理,Spring的AOP技术(底层就是JDK动态代理和CGLIB代理技术)

偶尔善良 提交于 2019-12-29 14:30:34
AOP 概述 什么是 AOP, 面向切面编程 AOP 为 Aspect Oriented Programming 的缩写 , 意为:面向 切面 编程 , 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术 . AOP 是 OOP 的延续 , 是函数式编程的一种衍生范型 . 利用 AOP 可以对业务逻辑的各个部分进行隔离 , 从而使得业务逻辑各部分之间的耦合度降低 , 提高程序的可重用性 , 同时提高了开发的效率 . - 传统开发模型 : 纵向的编程 . 面向切面编程 : 纵横配合的编程 . AOP 的作用及优势 作用: 在程序运行期间, 不修改任何相关源码对已有方法进行增强。 优势: 减少重复代码 、提高开发效率、维护方便 AOP 的实现方式 使用动态代理模式来实现 可能通过上面的介绍,我们还是没有一个清晰的认识。没关系,我们看看下面的具体应用。 //.模拟事务管理器 public class TransactionManagerHandler { public void begin() { System.out.println("开启事务"); } public void commit() { System.out.println("提交事务"); } public void rollback() { System.out.println("回滚事务"); }

手机游戏发行代理知识普及(一)

∥☆過路亽.° 提交于 2019-12-29 01:35:57
平台商与发行商的区别   这两种角色对一些开发团队还容易搞混。简单的说平台商就是有自有流量,比如91、360手机助手等,他们本身就有很强大的流量,因此与游戏研发商主要是联运模式,其实就是类似CPS,把你的游戏产品专门给这个渠道打一个包,有的还要求使用对方的支付渠道,然后再平台商自有流量上进行推广,其中产生的收益双方分成。   由于大部分平台商在行业内都很有影响力,因此一些手游团队产品出来首先想到的是找他们,但是却忽略了一点,平台商都是联运模式,也就是说游戏的运维、客服和运营都是需要研发商自己解决,平台商实际上只解决推广导用户的问题。这对于成都大部分纯研发的团队是个大的挑战。要么招一个有经验的人,而这方面的人才在成都是奇缺的,要么就是创始人自己现学现卖。   而发行商大部分是指那些没有自有流量,团队精通游戏产品运营及推广的公司,比如中手游卓越游戏就是这样的公司,他们在成都已经独家代理了一款手机游戏。这种发行商要想获得独家代理权,都要向研发商支付版权金和预付分成,这在研发公司圈子习惯性称为卖游戏。相当于发行商先付一笔钱给研发商,然后获得某一渠道的独家代理权,比如安卓中国区的发行权。然后由发行商负责制定整个游戏产品的推广计划和实施,同时发行商在游戏运营和客服上也要承担起来,另外更重要的就是根据自己的运营经验提出各种游戏修改意见,研发商需要配合这些修改,同时保持游戏产品不断的技术升级

Java中反射机制详解

安稳与你 提交于 2019-12-27 23:35:44
    序言       在学习java基础时,由于学的不扎实,讲的实用性不强,就觉得没用,很多重要的知识就那样一笔带过了,像这个马上要讲的反射机制一样,当时学的时候就忽略了,到后来学习的知识中,很多东西动不动就用反射,所以回过头来把这个给重新补一下,自己欠下的债,迟早是要还的。                                       ---WZY 一、什么是反射?     在运行状态中,对于 任意 一个类,都能够获取到这个类的所有属性和方法,对于 任意 一个对象,都能够调用它的 任意 一个方法和属性(包括私有的方法和属性),这种动态获取的信息以及动态调用对象的方法的功能就称为java语言的反射机制。通俗点讲,通过反射,该类对我们来说是完全透明的,想要获取任何东西都可以。     想要使用反射机制,就必须要先获取到该类的字节码文件对象(.class),通过字节码文件对象,就能够通过该类中的方法获取到我们想要的所有信息(方法,属性,类名,父类名,实现的所有接口等等),每一个类对应着一个字节码文件也就对应着一个Class类型的对象,也就是字节码文件对象。     获取字节码文件对象的三种方式。        1、Class clazz1 = Class.forName("全限定类名");  //通过Class类中的静态方法forName

HTTP协议详解

你离开我真会死。 提交于 2019-12-27 16:39:18
一、HTTP协议详解之URL篇 http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。 HTTP URL (URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下: http://host[":"port][abs_path ] http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,为空则使用缺省端口80;abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。 eg: 1、输入: www.guet.edu.cn 浏览器自动转换成: http://www.guet.edu.cn/ 2、http:192.168.0.116:8080/index.jsp 二、HTTP协议详解之请求篇 http请求由三部分组成,分别是:请求行、消息报头、请求正文 1、请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:Method Request-URI HTTP-Version CRLF 其中 Method表示请求方法

java面试题汇总40个基础题

余生长醉 提交于 2019-12-27 03:08:22
1.&和&&的区别? &:逻辑与(and),运算符两边的表达式均为true时,整个结果才为true。 &&:短路与,如果第一个表达式为false时,第二个表达式就不会计算了。 2.在java中如何跳出当前的多重循环? 在循环语句外前面定义一个标号,然后在里层循环体的代码中使用带有标号的break语句,即可跳出循环。 3.最有效率的方法算出2X8等于几? 使用位运算,效率最高:2<<3,表示2向右移动了3位,就相当于2乘以2的3次方,结果:16。 4.”==”和equals方法究竟有什么区别? == : 表示两个变量的值是否相等,比较两个基本数据类型的数据或者引用变量,用==。 equals:用于比较两个独立对象的内容是否相同。字符串的比较也用equals。 5.Int和integer的区别? Int是Java的8中基本数据类型之一,integer是int的封装类。Int类型的默认值为0,integer默认值为null,所以区别在于,integer能区分出null值和0的区别。 6.三个与取整有关的方法: Math.ceil():表示向上取整;Math.ceil(11.3)=12;Math.ceil(-11.3)=-12。 Math.floor():表示向下取整;Math.floor(11.6)=12;Math.floor(-11.6)=-12。 Math.round()

Spring的基础知识点,面试常问

 ̄綄美尐妖づ 提交于 2019-12-27 02:02:27
1、Spring是什么? Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。 常见的配置方式有三种:基于XML的配置、基于注解的配置、基于Java的配置。 主要由以下几个模块组成: Spring Core:核心类库,提供IOC服务; Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等); Spring AOP:AOP服务; Spring DAO:对JDBC的抽象,简化了数据访问异常的处理; Spring ORM:对现有的ORM框架的支持; Spring Web:提供了基本的面向Web的综合特性,例如多方文件上传; Spring MVC:提供面向Web应用的Model-View-Controller实现。 2、Spring 的优点? (1)spring属于低侵入式设计,代码的污染极低; (2)spring的DI机制将对象之间的依赖关系交由框架处理,减低组件的耦合性; (3)Spring提供了AOP技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用。 (4)spring对于主流的应用框架提供了集成支持。 3、Spring的AOP理解: OOP面向对象,允许开发者定义纵向的关系