代理模式

Spring AOP expose-proxy

扶醉桌前 提交于 2019-12-02 14:53:50
写在前面   expose-proxy。为是否暴露当前代理对象为ThreadLocal模式。   SpringAOP对于最外层的函数只拦截public方法,不拦截protected和private方法(后续讲解),另外不会对最外层的public方法内部调用的其他方法也进行拦截,即只停留于代理对象所调用的方法。 案例分析 public class AServiceImpl implements AService{ @Override public void barA() { System.out.println("AServiceImpl.barA()"); barB(); } @Override public void barB() { System.out.println("AServiceImpl.barB()"); } } 控制台的输出结果: run my before advice AServiceImpl.barA() AServiceImpl.barB() 分析:   发现aop并没有对barB方法进行增强,只是增强了barA方法。   判断上述this.barB()方法是否被拦截的最本质的东西是看this到底是谁?有如下对象B类的对象b,和cglib生成的代理对象bProxy,代理对象bProxy内部拥有b。如果调用b对象的任何方法,肯定不会发生任何拦截

nginx负载均衡

三世轮回 提交于 2019-12-02 14:52:47
负载均衡 负载均衡(反向代理)概念 什么是集群? 完成相同任务或者工作的一组服务器(web01 web02 web03 --- web集群) Nginx代理服务基本概述 1.代理一词往往并不陌生, 该服务我们常常用到如(代理理财、代理租房、代理收货等等),如下图所示 2.在没有代理模式的情况下,客户端和 Nginx 服务端,都是客户端直接请求服务端,服务端直接响应客户端。 3.那么在互联网请求里面, 客户端往往无法直接向服务端发起请求, 那么就需要用到代理服务, 来实现客户端和服务通信,如下图所示 什么是代理? 反向代理:外网 → (外网网卡)代理服务器(内网网卡) → 公司网站服务器web(内网) 正向代理:内网(局域网主机) → (内网网卡)代理服务器(外网网卡) → 互联网 → web服务器(国外) Nginx代理服务支持的协议 1.Nginx 作为代理服务,可支持的代理协议非常的多,具体如下图 2.如果将 Nginx 作为反向代理服务,常常会用到如下几种代理协议,如下图所示 3.反向代理模式与 Nginx 代理模块总结如表格 反向代里模式 Nginx配置模块 http、websocket、https ngx_http_proxy_module fastcgi ngx_http_fastcgi_module uwsgi ngx_http_uwsgi_module grpc

java动态代理和cglib动态代理

你说的曾经没有我的故事 提交于 2019-12-02 14:32:50
动态代理应用广泛,Spring,Struts等框架很多功能是通过动态代理,或者进一步封装来实现的。 常见的动态代理模式实现有Java API提供的动态代理和第三方开源类库CGLIB动态代理。 Java API提供的动态代理是基于类反射实现的,用到的类有: java.lang.reflect.InvocationHandler; java.lang.reflect.Method; java.lang.reflect.Proxy; 其实现是通过Proxy类的 newProxyInstance() 方法产生代理对象。自定义动态代理类需要实现InvocationHandler接口,该接口只有一个invoke()方法。 CGLIB是通过生成java 字节码从而动态的产生代理对象,因此需要字节码解析处理的依赖asm类库,字节码动态生成的代理对象实际上是继承了真实主题类的。这种实现方式需要导入cglib和asm的类库。下面用到的例子是cglib-2.2.2.jar, asm-3.3.1.jar。cglib使用了 MethodInterceptor,其中的方法是intercept(),这是拦截的概念,很容易就想到了Struts2的拦截器。 比较之下,Java API提供的动态代理需要面向接口,产生代理对象,因此真实主题实现类必须实现了接口才可以。 而CGLIB不需要面向接口,可以代理简单类

代理模式

混江龙づ霸主 提交于 2019-12-02 13:06:28
其实,代理模式在生活中的应用很多,典型的例如明星的经纪人,外界与明星的联系都由经纪人来负责,什么电话该接进来,什么活动该拒绝都交给经纪人,这样在最大程度上保护了明星的隐私。这种模式也符合单一职责约束,明星只用做好自己的事情,其他的琐事经纪人会搞定的。 1. 案例场景 下面,我们就来用代码模拟一下明星和经济人的场景,从而了解代理模式的具体用法。 作为利益共同体,经纪人和明星需要具有共同的行为,只不过真正做事的是明星,经纪人负责传话,因此他们需要一个共同Activiey接口: public interface Activity { public void interview(); public void arietyShow(); } 明星类: public class Star implements Activity{ @Override public void interview() { System.out.println("明星接受采访。。。"); } @Override public void arietyShow() { System.out.println("明星参加综艺节目。。。"); } } 经纪人类: public class Agent implements Activity{ Star star; public Agent(Star star){ this

java ------ 代理

跟風遠走 提交于 2019-12-02 12:09:20
1.代理模式的三大要素    代理这种模式在我们生活中并不少见,向黄牛代购票,医院戴挂号,甚至经纪人,律师等等职业都是代理    但是不管是哪种代理,其实都是离不开三大要素的     a.被代理人 b.代理的事务 c.代理人 2.java中的代理    抽象到java中,就有两个对象(代理人和被代理人)以及一个接口方法(代理的事务)而已     代码举例:    首先,创建一个代理对象ProxyDemo 1 package com.pl.demo; 2 3 import java.lang.reflect.InvocationHandler; 4 import java.lang.reflect.Method; 5 6 /** 7 * @AutLhor: Mr.P 8 * @Date: 2019/10/26 9 * @Time: 11:30 10 */ 11 public class ProxyDemo implements InvocationHandler { 12 private Object object;//被代理的真实角色,持有一个被代理的对象 13 14 public ProxyDemo(Object object) { 15 this.object = object; 16 } 17 //第二个参数是被代理对象实现的借口方法,第三参数是被代理对象的接口方法的参数

java基础003

眉间皱痕 提交于 2019-12-02 10:45:28
1.Mysql两种储存引擎:innoDB和MylSAME MyISAM强调表的性能,执行速度比innoDB快,但不支持事物等高级数据库功能(表级锁(容易造成锁冲突,并发最低))。 innoDB支持事物,外键,行级锁(并发最高)等高级数据库功能。 2.简述synchronized和java.util.concurrent.locks.Lock的异同? 主要相同点 :Lock能完成synchronized所实现的所有功能; 主要不同点: Syschronized是在jvm层面上的,是一个关键字,而Lock是一个类; Lock有比synchronized更精确的线程语义和更好的性能,而且不强制性的要求一定要获得锁; Syschronized同步数据少量的话,性能比Lock好,而数据大量同步,Lock性能要好 synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且最好在finally块中释放(这是释放外部资源的最好的地方)。 3.说出一些常用的类,包,接口,请各举5个? 类:String Integer File Date HashMap 包:java.lang java.util java.sql java.io javax.servlet 接口:Map List Set Servlet Runnable 4.java中实现多态的机制是什么?

动态代理

别说谁变了你拦得住时间么 提交于 2019-12-02 09:19:13
1代理设计模式 1. 设计模式:前人总结的一套解决特定问题的代码. 2. 代理设计模式优点: 2.1 保护真实对象 2.2 让真实对象职责更明确. 2.3 扩展 3. 代理设计模式 3.1 真实对象.(老总) 3.2 代理对象(秘书) 3.3 抽象对象(抽象功能),谈小目标 静态代理设计模式 1. 由代理对象代理所有真实对象的功能. 1.1 自己编写代理类 1.2 每个代理的功能需要单独编写 2. 静态代理设计模式的缺点: 2.1 当代理功能比较多时,代理类中方法需要写很多. 动态代理 1. 为了解决静态代理频繁编写代理功能缺点. 2. 分类: 2.1 JDK 提供的 2.2 cglib 动态代理 1.jdk动态代理 1. 和 cglib 动态代理对比 1.1 优点:jdk 自带,不需要额外导入 jar 1.2 缺点: 1.2.1 真实对象必须实现接口 1.2.2 利用反射机制.效率不高. 2. 使用 JDK 动态代理时可能出现下面异常 2.1 出现原因:希望把接口对象转换为具体真实对象 步骤: 1.定义一个接口 public interface GongNeng { public void chiFan(); public void talk(); } 2.编写代理类 import java.lang.reflect.InvocationHandler; import java

关于代理模式的个人理解

别等时光非礼了梦想. 提交于 2019-12-02 09:10:31
Proxy代理模式是一种结构设计模式。主要是解决直接访问对象所带来的问题。 代理,分为动态代理和静态代理。 Subject : 抽象接口 RealSubject:抽象接口的实现类 Proxy:代理类,实现Subject。持有RealSubject对象的实例,其中所有的方法都是调用 RealSubject 来实现。 Proxy 代理类因为是通过调用 RealSubject 来实现,所以就可以在 RealSubject 的方法调用之前以及之后做一些事情,也就是所谓的面向切面编程(AOP)。 静态代理,顾名思意,所要代理类是直接编写在Java代码中的,在编译时就已经固定下来。而动态代理,则是在运行时才实际生成代理类。 JDK 动态代理示例代码: package com . java . test . jvm ; import java . lang . reflect . InvocationHandler ; import java . lang . reflect . Method ; import java . lang . reflect . Proxy ; public class DynamicProxyTest { interface IHello { void sayHello ( ) ; } static class Hello implements IHello {

Java代理

点点圈 提交于 2019-12-02 08:21:05
什么是代理 代理是一种设计模式,它的核心思想,是将对目标的访问转移到代理对象上。这样做的好处就是,目标对象在不改变代码的情况下,可以通过代理对象加一些额外的功能。这是一种编程思想,在不改变原有代码的情况下,通过代理增加一些扩展功能。 代理过程如图所示,用户访问代理对象,代理对象通过访问目标对象,来达到用户访问目标对象的目的, 图片发自简书App 代理模式包含一下三个角色: ISubject:接口对象,该接口是对象和它的代理共用的接口。 TargetSubject:目标对象,是实现抽象主题接口的类。 Proxy:代理角色,内部含有对目标对象TargetSubject的引用,从而可以操作真实对象。代理对象提供与目标对象相同的接口,以便在任何时刻都能代替目标对象。同时,代理对象可以在执行目标对象操作时,附加其他的操作,相当于对真实对象进行封装。 常见的代理模式分为静态代理和动态代理,动态代理在Java中的实现分为JDK动态代理和cglib代理。 静态代理 在之前已经说过,在代理模式中有三个角色,一是目标接口,二是目标对象,三是代理对象。 现在以具体代码来实现,首先是目标接口如下: public interface IBlogService { void writeBlog(); } 目标对象实现了目标接口,代码如下: public class BlogService implements

泡妞与设计模式

两盒软妹~` 提交于 2019-12-02 08:04:42
面试的时候,设计模式会经常被问到。其实我们在写代码中或多或少会用到一些模式,面试官问你设计模式的问题,更多是看你有没有总结过。如果一直都是在那垒代码,你当然会认为这是个很难的问题。所以我们需要总结一下设计模式。 1. SINGLETON 单例模式 单例模式:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。 俺有6个漂亮的老婆,她们的老公都是我,我就是我们家里的老公Sigleton,她们只要说道“老公”,都是指的同一个人,那就是我(刚才做了个梦啦,哪有这么好的事)。 2. FACTORY METHOD 工厂方法模式 工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。 请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了。 3. FACTORY 工厂模式 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如