代理模式

代理模式

戏子无情 提交于 2020-01-13 18:11:32
代理模式 经过学习整理后来输出心得 静态代理 public interface Person { void findLove ( ) ; } public class Son implements Person { @Override public void findLove ( ) { System . out . println ( "找美女" ) ; } } //父亲就是儿子的代理类 public class Father implements Person { private Son son ; public Father ( Son son ) { this . son = son ; } @Override public void findLove ( ) { before ( ) ; son . findLove ( ) ; after ( ) ; } void before ( ) { System . out . println ( "开始物色" ) ; } void after ( ) { System . out . println ( "结束" ) ; } } public class Test { public static void main ( String [ ] args ) { Father father = new Father ( new

JDK动态代理与CGLIB动态代理

爱⌒轻易说出口 提交于 2020-01-13 08:23:24
JDK动态代理和CGLIB动态代理是SpringAOP非常重要的两个概念,SpringAOP是通过生成目标对象的代理类来实现对目标对象的增强,在说JDK的动态代理之前我们先来回顾一下静态代理: 一、静态代理: 首先定义一个业务接口 public interface ITestService { void sayHello(); String getMsg(); } 然后我们编写一个简单的实现类: public class TestServiceImpl implements ITestService{ @Override public void sayHello() { System.out.println("TestServiceImpl sayHello"); } @Override public String getMsg() { return "TestServiceImpl Msg"; } } 然后我们再编写一个代理类用来代理TestServiceImpl: public class TestServiceProxy implements ITestService { private ITestService target; public TestServiceProxy(ITestService testService) { this.target =

【一步一步学习spring】aop概述

为君一笑 提交于 2020-01-12 06:41:16
1. 啥是AOP 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 AOP采取 横向抽取机制 ,解决公共功能的重复性代码(性能监视、事务管理、安全检查、缓存) Spring AOP是使用纯java实现,不需要专门的编译过程和类加载,在运行期通过代理方式向目标类织入增强代码。 2. 为啥要AOP 举个栗子: 需求1: 要为某项save功能添加鉴权功能。 传统的开发模式: 在相关的类添加鉴权的方法,在该功能中添加调用该方法。 需求2: 客户对这个鉴权功能很满意,要求为涉及到的所有模块的save功能都加上该功能。 传统的开发模式: 如果再像上面那样在具体的实现类中重复定义鉴权方法就太傻了。那就把该方法抽取到一个base类中,相关方法都继承base类,从而做到方法的重用。 引入AOP: 采用横向抽取机制代替纵向继承。 本质上这个横向抽取就是一个代理操作。 抽取一个鉴权代理类,在代理类中增加对相关功能的鉴权操作,无需对原有的业务类进行修改。 3. AOP相关术语 JoinPoint(连接点):可以被拦截的点。在spring中,这些点指的是方法,因为spring中只支持方法类型的连接点。 Pointcut(切入点):真正被拦截的点。 Advice(通知/增强):拦截后要做的事

07-代理模式

跟風遠走 提交于 2020-01-11 06:25:25
代理模式(委托模式) 一、定义 为其他对象提供一种代理以控制对这个对象的访问 代理模式的通用类图 Subject 为抽象主题角色,是一个普通的业务逻辑类型, RealSubject为具体主题角色,也叫做委托角色,被代理角色,是业务逻辑的具体执行者。 Proxy为代理主题角色,也叫做委托类,代理类,他负责对真实角色的应用,把所有抽象主题类定义的方法限制委托给真实主题角色实现,并且在真实主题角色处理完毕前后座预处理和善后处理工作 代理模式的通用源码 抽象主题类 public interface Subject { //定义一个方法 public void request ( ) ; } 真实主题类 public class RealSubject implements Subject { //实现方法 public void request ( ) { //业务逻辑处理 } } 代理类 public class Proxy implements Subject { //要代理哪个实现类 private Subject subject = null ; //默认被代理者 public Proxy ( ) { this . subject = new Proxy ( ) ; } //通过构造函数传递代理者 public Proxy ( Object . . . objects ) { }

代理模式

做~自己de王妃 提交于 2020-01-11 00:09:36
3.7代理模式 代理模式基本介绍 为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象本身访问目标对象,这样的好处是可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。 被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象 代理模式有不用的形式,主要有三种静态模式、动态代理(JDK代理、接口代理)和Cglib代理(可以在内存动态的创建对象,而不需要实现接口,属于动态代理的范畴) 模式角色: 目标接口:定义一个被代理对象要实现的功能方法 目标对象:也就是被代理的对象,实现目标接口的的方法 代理对象:实现目标接口,并且可以扩展目标对象的功能方法 静态代理 目标接口 public interface TargetInterface { void option ( ) ; } 目标对象 public class TargetObject implements TargetInterface { @Override public void option ( ) { System . out . println ( "I`m a target object to be Proxied" ) ; } } 代理对象 public class ProxyObject implements TargetInterface { private

设计模式@第15章:代理模式

做~自己de王妃 提交于 2020-01-10 23:02:54
第15章:代理模式 一、代理模式(Proxy) (一)代理模式的基本介绍 代理模式: 为一个对象提供一个替身,以控制对这个对象(被代理的对象)的访问 。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。 被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象; 代理模式有不同的形式, 主要有三种 静态代理 、 动态代理 (JDK 代理、接口代理)和 Cglib 代理 (可以在内存动态的创建对象,而不需要实现接口, 他是属于动态代理的范畴) 。 代理模式示意图 二、静态代理 (一)静态代码模式的基本介绍 静态代理在使用时,需要定义接口或者父类,被代理对象(即目标对象)与代理对象一起实现相同的接口或者是继承相同父类 (二)应用实例 具体要求 定义一个接口:ITeacherDao 目标对象 TeacherDAO 实现接口 ITeacherDAO 使用静态代理方式,就需要在代理对象 TeacherDAOProxy 中也实现 ITeacherDAO 调用的时候通过调用代理对象的方法来调用目标对象. 特别提醒:代理对象与目标对象要实现相同的接口,然后通过调用相同的方法来调用目标对象的方法 思路分析图解(类图) 代码实现 接口:ITeacherDao package com.gjxaiou.proxy

哈工大移动互联网复习

给你一囗甜甜゛ 提交于 2020-01-10 10:49:27
好好复习喽,写个复习博客 这门课程其实还是蛮难受的,一者在于这门课程在实验上偏向于移动端开发,但是我其实并没有兴趣在安卓和IOS开发,二者在于这门课程在理论上有很多东西是通信原理上面的,我们软件学生学了没有用,不学还拿不到分,而且知识很杂还没有课本,复习起来是非常难受。不多bb,来看课件: 1. 移动互联网概述 1)移动互联网的定义 2)移动互联网的特点: 3)移动互联网的体系结构 移动终端,移动网络,网络接入,业务接入,移动网络应用 4)移动终端应用类型 6)移动互联网开发技术 网络通信技术 多媒体技术 智能架构技术 UI技术 利用浏览器内核webkit技术 2.移动终端与操作系统 1)移动终端的组成(软硬件) 硬件组成技术: 芯片组技术:高集成度,高速率,支持多种操作系统,多制式,低功耗是未来的发展方向 屏幕技术:显示屏技术和触屏技术 电池技术:续航能力 摄像头技术:低噪声,高像素 传感器技术:提高精度 软件组成技术: 操作系统是基础,基础中间件,业务中间件,通信中间件实现应用支撑。 2)安卓操作系统 activity的状态:激活或运行状态,暂停状态,停止状态 activity中相互调用的问题: 使用Intent,Intent.setClass(this,OtherActivity.class); start(Intent); 3)IOS IOS是一个基于UNIX内核的操作系统

[Spring框架]Spring AOP基础入门总结一.

﹥>﹥吖頭↗ 提交于 2020-01-10 07:30:35
[Spring框架]Spring AOP基础入门总结一. 前言: 前面已经有两篇文章讲了Spring IOC/DI 以及 使用xml和注解两种方法开发的案例, 下面就来梳理一下Spring的另一核心AOP. 一, 什么是AOP 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过 预编译 方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是 OOP 的延续,是软件开发中的一个热点,也是 Spring 框架中的一个重要内容,是 函数式编程 的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的 耦合度 降低,提高程序的可重用性,同时提高了开发的效率。 AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码. Spring AOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类织入增强代码. 二,AOP开发中的专业术语 Joinpoint(连接点) :所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点. Pointcut(切入点): 所谓切入点是指我们要对哪些Joinpoint进行拦截的定义. Advice(通知/增强) :所谓通知是指拦截到Joinpoint之后所要做的事情就是通知.通知分为前置通知

跟我1+1学设计模式-代理模式

ε祈祈猫儿з 提交于 2020-01-10 03:42:06
结构型设计模式 - 代理模式 在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象。 例如: 购买火车票不一定要去火车站买,可以通过 12306 网站或者去火车票代售点买。又如找女朋友、找保姆、找工作等都可以通过找中介完成。 代理模式的定义与特点 代理模式的定义: 由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。 代理模式的主要优点有: 代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用; 代理对象可以扩展目标对象的功能; 代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度; 其主要缺点是: 在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢; 增加了系统的复杂度; 代理模式的代码实现 模拟保存动作,定义一个保存动作的接口:IUserDao.java,然后目标对象实现这个接口的方法UserDao.java,此时如果使用静态代理方 式,就需要在代理对象(UserDaoProxy.java)中也实现IUserDao接口.调用的时候通过调用代理对象的方法来调用目标对象. 需要注意的是,代理对象与目标对象要实现相同的接口,然后通过调用相同的方法来调用目标对象的方法 静态代理 /** *

设计模式:代理模式

风流意气都作罢 提交于 2020-01-10 03:33:17
一、简介 代理模式指的是客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象。使用代理模式有两个目的:保护目标对象;增强目标对象。 代理模式的结构: 真实类:客户端要调用的对象的类型; 接口:真实要执行的对象所实现的接口; 代理类:实现了和真实所实现的相同接口,客户端通过调用代理类的实例间接调用真实类的对象。 二、静态代理 用一个例子来表示代理模式:有个人renter要租房子,但是对当地不熟,需要一个当地的朋友friend来帮他找房子。 1、真实类的接口 Person: public interface Person { void findHouse(); } 2、真实类 Renter: public class Renter implements Person { @Override public void findHouse() { System.out.println("找房子"); } } 3、代理类 Friend: public class Friend { private Renter renter; public Friend(Renter renter) { this.renter = renter; } public void findHouse() { System.out.println("朋友代找房子"); renter.findHouse