代理模式

比较Spring AOP和AspectJ

你离开我真会死。 提交于 2020-03-19 12:51:52
3 月,跳不动了?>>> 介绍 当前有多个可用的AOP库,这些库必须能够回答许多问题: 它与我现有的或新的应用程序兼容吗? 在哪里可以实施AOP? 它与我的应用程序集成的速度有多快? 性能开销是多少? 在本文中,我们将着眼于回答这些问题,并介绍Spring AOP和AspectJ(这两种最流行的Java AOP框架)。 2. AOP 概念 在开始之前,让我们对术语和核心概念进行快速的高层次审查: 切面–一种标准代码/功能,分散在应用程序的多个位置,通常与实际的业务逻辑(例如,事务管理)不同。每个方面都专注于特定的跨领域功能 连接点–这是程序执行过程中的特定点,例如方法执行,构造函数调用或字段分配 通知–方面在特定联接点中采取的操作 切入点–与联接点匹配的正则表达式。每当任何连接点与切入点匹配时,都会执行与该切入点关联的指定建议 编织–将方面与目标对象链接以创建建议对象的过程 3.Spring AOP 和AspectJ 现在,让我们从多个角度讨论Spring AOP和AspectJ,例如功能,目标,编织,内部结构,连接点和简单性 3.1 能力和目标 简而言之,Spring AOP和AspectJ具有不同的目标。 Spring AOP旨在在Spring IoC上提供一个简单的AOP实现,以解决程序员面临的最常见问题。它不打算用作完整的AOP解决方案

Tuxedo中间件 配置维护记录

試著忘記壹切 提交于 2020-03-18 18:08:30
Tuxedo 配置维护手册 Tuxedo 作为系统的中间件,其配置主要包括:资源文件的配置和应用环境的配置;其管理和维护主要包括:系统的启动和关闭、日志的跟踪查看工作。 Tuxedo 应用系统的配置 一、应用系统的资源配置,全都包含在两个资源配置文件中(ubbconfig 和dmconfig ),在这两个配置文件中包含了系统所有的应用资源(文件)。 1、 对于ubbconfig文件,可以任意使用一个文件名(如:ubb.txt),使用一种文本编辑工具,将应用系统的资源分类进行配置,相关进程启动数量等等都应该配置在其中,然后设置环境变量TUXCONFIG,使用系统命令:tmloadcf 来将文本文件ubb.txt,转化生成环境变量TUXCONFIG制定的二进制文件。在该文件中主要包含了几个参数的设置:系统所使用的共享内存的键值IPCKEY,针对workstation客户端的监听进程的端口(WSL),多台机器之间互连(登记中心与各网关)的网络地址和端口(NADDR,NLSADDR),数据依赖路由的设定等等。 详细的内容参看《Ubbconfig配置.doc》 参看模版来实现移植或添加应用进程等等。 2、 对于dmconfig文件,可以任意使用一个文件名(如:dm.txt),使用一种文本编辑工具,将应用系统的多域互联及互相调用的关系进行配置,包括多域之间互联的地址和端口,然后使用系统命令

Java 代理模式

断了今生、忘了曾经 提交于 2020-03-18 15:51:09
  在阎宏博士的《JAVA与模式》一书中开头是这样描述代理(Proxy)模式的:代理模式是对象的结构模式。代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。   代理模式的结构   代理对象在客户端和目标对象之间起到中介的作用。   代理模式类图如下:      代理模式中的角色:   抽象对象角色:声明了目标对象和代理对象的共同接口,在使用目标对象的地方都可以使用代理对象。   目标对象角色:定义了代理对象代表的目标对象。   代理对象角色:代理对象内部有目标对象的引用,可以操作目标对象。      抽象对象角色: 1 public abstract class AbstractObject { 2 //操作 3 public abstract void operation(); 4 }   目标对象角色: 1 public class RealObject extends AbstractObject { 2 @Override 3 public void operation() { 4 //一些操作 5 System.out.println("一些操作"); 6 } 7 }   代理对象角色: 1 public class ProxyObject extends AbstractObject{ 2 RealObject realObject = new

CAS单点登录(一)——初识SSO

对着背影说爱祢 提交于 2020-03-18 15:50:07
某厂面试归来,发现自己落伍了!>>> 前言:其实好早就想把CAS的这一套知识整合一下,在工作上也应用到了这块,只是最近才在工作上接触到CAS,所以刚好把这些知识总结一下。这块可能是一个比较大的模块知识点,所以会有多篇文章进行逐一展开,笔者会尽量抽空更新,当然如果文章中存在错误,期望大家指出。 一、初识CAS 首先我们来说一下CAS,CAS全称为Central Authentication Service即中央认证服务,是一个企业多语言单点登录的解决方案,并努力去成为一个身份验证和授权需求的综合平台。 CAS是由Yale大学发起的一个企业级的、开源的项目,旨在为Web应用系统提供一种可靠的单点登录解决方法(属于 Web SSO )。 CAS协议至少涉及三方:客户端Web浏览器,请求身份验证的Web应用程序和CAS服务器。 它也可能涉及后端服务,如数据库服务器,它没有自己的HTTP接口,但与Web应用程序进行通信。 主要特征: 多种的协议的支持,包括CAS (v1、v2、v3)、SAML(v1、v2)、OAuth、OpenID、OpenID Connect和WS-Federation Passive Requestor 多种认证机制,可以通过JAAS,LDAP,RDBMS,X.509,Radius,SPNEGO,JWT,Remote,Trusted,BASIC,Apache Shiro

java框架学习日志-7(静态代理和JDK代理)

╄→гoц情女王★ 提交于 2020-03-17 15:12:23
某厂面试归来,发现自己落伍了!>>> 静态代理 我们平时去餐厅吃饭,不是直接告诉厨师做什么菜的,而是先告诉服务员点什么菜,然后由服务员传到给厨师,相当于服务员是厨师的代理,我们通过代理让厨师炒菜,这就是代理模式。代理模式需要三个东西: 真实对象——厨师(chef),用户真正需要去用到的对象。 调用者——客人(Client),需要用到真实对象的对象。 代理对象——服务员(waiter),代理真实对象与调用者沟通的对象。 厨师需要有个炒菜的方法,服务员负责代理厨师,所以也需要有一个炒菜方法,为了保证两个对象的炒菜方法一致,需要一个接口。 public interface Cook { public void cook(String name);//传入菜品名字 } 然后chef实现这个接口 public class Chef implements Cook{ @Override public void cook(String name) { System.out.println("正在炒"+name); } } waiter也需要实现这个接口 public class Waiter implements Cook{ Chef chef; public Waiter(Chef chef) { //通过构造函数与获取chef的实例对象 this.chef = chef; }

内网渗透代理和转发

早过忘川 提交于 2020-03-17 13:05:17
原文 by CH_vksec 最近尝试了一些内网端口的转发和内网穿透,现在一起总结一下。 0x01 正向和反向代理 正向代理中,proxy 和 client 同属一个 LAN,对 server 透明; 反向代理中,proxy 和 server 同属一个 LAN,对 client 透明。 实际上 proxy 在两种代理中做的事都是代为收发请求和响应,不过从结构上来看正好左右互换了下,所以把前者那种代理方式叫做正向代理,后者叫做反向代理。 正向代理 (Forward Proxy) Lhost--》proxy--》Rhost Lhost 为了访问到 Rhost,向 proxy 发送了一个请求并且指定目标是 Rhost,然后 proxy 向 Rhost 转交请求并将获得的内容返回给 Lhost,简单来说正向代理就是 proxy 代替了我们去访问 Rhost。 反向代理(reverse proxy) Lhost<--->proxy<--->firewall<--->Rhost 和正向代理相反(废话),Lhost 只向 proxy 发送普通的请求,具体让他转到哪里,proxy 自己判断,然后将返回的数据递交回来,这样的好处就是在某些防火墙只允许 proxy 数据进出的时候可以有效的进行穿透 简单区分 正向代理代理的是客户端,反向代理代理的是服务端,正向代理是我们自己 (Lhost) 戴套

使用Spring进行面向切面编程(AOP)

女生的网名这么多〃 提交于 2020-03-17 08:36:43
本文转载自: 使用Spring进行面向切面编程(AOP) 前言 面向切面编程(AOP)提供另外一种角度来思考程序结构,通过这种方式弥补了面向对象编程(OOP)的不足。 除了类(classes)以外,AOP提供了 切面。切面对关注点进行模块化,例如横切多个类型和对象的事务管理。 (这些关注点术语通常称作 横切(crosscutting) 关注点。) Spring的一个关键的组件就是 AOP框架。 尽管如此,Spring IoC容器并不依赖于AOP,这意味着你可以自由选择是否使用AOP,AOP提供强大的中间件解决方案,这使得Spring IoC容器更加完善。 Spring 2.0 AOP Spring 2.0 引入了一种更加简单并且更强大的方式来自定义切面,用户可以选择使用基于模式(schema-based)的方式或者使用@AspectJ注解。 这两种风格都完全支持通知(Advice)类型和AspectJ的切入点语言,虽然实际上仍然使用Spring AOP进行织入(Weaving)。 本章主要讨论Spring 2.0对基于模式和基于@AspectJ的AOP支持。请查阅"AOP声明风格的选择"一节获取 为你的应用选择适当的声明风格的建议。Spring 2.0完全保留了对Spring 1.2的向下兼容性,下一章 将讨论 Spring 1.2 API所提供的底层的AOP支持。

数据库中间件漫谈

允我心安 提交于 2020-03-16 21:44:59
某厂面试归来,发现自己落伍了!>>> 1.前言 随着业务的发展,MySQL数据库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作的开销也会越来越大;另外,无论怎样升级硬件资源,单台服务器的资源(CPU、磁盘、内存、网络IO、事务数、连接数)总是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。 分表、分库和读写分离可以有效地减小单台数据库的压力。 本文主要针对业界主流的数据库中间件的实现、功能、成本等方面进行对比,总结数据库中间件的实现方式,并展望未来的可能发展。 2. 实现方式 一般来说,对于数据库中间件,可以在以下六个层次做切入。 2.1 代码层 在同一个项目中创建多个数据源,采用if else的方式,直接根据条件在代码中路由。 Spring中有动态切换数据源的抽象类,具体参见AbstractRoutingDataSource。 如果项目不是很庞大,使用这种方式能够快速的进行分库。但缺点也是显而易见的,这种海量的代码侵入是绝不能被接受的。 而且当查询结果返回时,需要对跨库、聚合等查询结果进行归并,开发工作量非常巨大。 这种方式了解一下即可,一般不会去使用。 2.2 框架层 主要是修改或增强现有ORM框架的功能,在SQL中增加一些自定义原语或者hint来实现。 常见的比如实现一些拦截器(比如Mybatis的Interceptor接口)

设计模式——代理模式

霸气de小男生 提交于 2020-03-16 14:46:28
平时我们使用的框架中非常频繁地使用了动态代理。可以说如果一个框架不使用动态代理的话,这个框架不太可能做成一个通用的框架。因此动态代理的知识是我们必须要掌握的知识。 本博客是网络转载的,原文请点击 这里 代理模式简介 Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题。(某些对象只想提供部分方法让外部对象访问) 代理模式是一种常用的结构型设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息( beforeAdvice ),过滤消息并转发消息,以及进行消息被委托类执行后的后续处理( afterAdvice ) 为了保持行为的一致性,代理类和委托类通常会实现相同的接口,所以在访问者看来两者没有丝毫的区别。 通过代理类这中间一层,能有效控制对委托类对象的直接访问,也可以很好地隐藏和保护委托类对象,同时也为实施不同控制策略预留了空间,从而在设计上获得了更大的灵活性 。 更通俗的说,代理解决的问题当两个类需要通信时,引入第三方代理类,将两个类的关系解耦,让我们只了解代理类即可,而且代理的出现还可以让我们完成与另一个类之间的关系的统一管理,但是切记,代理类和委托类要实现相同的接口,因为代理真正调用的还是委托类的方法。 使用场景 方法增强(添加注解实现一些额外的功能) AOP 等 代理模式分类 按照代理的创建时期

代理模式:利用JDK原生动态实现AOP

会有一股神秘感。 提交于 2020-03-15 09:01:54
目录 概述与模型 1、概述   含义:控制对对象的访问。   作用:详细控制某个(某类)某对象的方法,在调用之前做前置处理,调用之后做后置处理,从而实现将统一流程代码放在代理类中处理。   举例:我们在学习JDBC的时候,在批量处理的时候遇到过事务。流程:设置提交方式为手动提交-开启事务-批量处理-关闭事务-设置提交方式为默认。从这里我们清晰可以看见,每次进行批处理的时候,唯有增删改操作变化,其他的操作都是一样的。那么,我们可不可以把一样的操作提取出来交给一个类处理,批量操作提取出来交给一个类实现?带着疑问,我们来看一下代理模式的模型,你就有所明白了。 2、模型       Subject(抽象角色):定义代理角色和真实角色的公共对外方法。   RealSubject(真实角色):实现抽象角色,定义真实角色所要实现的真实业务逻辑,供代理角色调用。   Proxy(代理角色):实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。   最终目标:将统一的流程控制放到代理角色处理。 应用场景描述   1、安全代理:屏蔽对真实角色的直接访问,由代理角色控制,等业务真实需要的时候,才由代理对象调用真实对象方法。   2、远程代理:通过代理类处理远程方法调用(RMI)。   3、延迟代理:先加载轻量级的代理对象,真正需要再加载真实对象。例如加载图片