代理模式

Java框架之Spring02-AOP-动态代理-AspectJ-JdbcTemplate-事务

拈花ヽ惹草 提交于 2020-01-18 13:41:04
AOP 动态代理   代理设计模式的原理: 使用一个代理将原本对象包装起来 ,然后用该代理对象”取代”原始对象。任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上。 代理模式的三要素: 代理主题接口 代理者 被代理者 代理模式的主要优点 代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用; 代理对象可以扩展目标对象的功能; 代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度; 其主要缺点 在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢; 增加了系统的复杂度; 动态代理的方式    静态代理类只能替一个主题接口进行代理工作 基于接口实现动态代理: JDK动态代理 基于继承实现动态代理: Cglib、Javassist动态代理 JDK动态代理步骤: * 1、编写主题接口 * 2、编写被代理类 * 3、编写代理工作处理器:即代理类要替被代理类做什么事情(有参构造器) * 要求:必须实现InvocationHandler,重写 * Object invoke(Object proxy, Method method, Object[] args) * 第一个参数:代理类对象 * 第二个参数:被代理类和代理类 要执行的方法 * 第三个参数:要执行方法的实参列表 * 这个invoke方法不是程序员调用

一款好用的内网穿透工具frp

女生的网名这么多〃 提交于 2020-01-18 08:04:39
对于没有公网 IP 的内网用户来说,远程管理或在外网访问内网机器上的服务是一个问题。 今天给大家介绍一款好用内网穿透工具 FRP,FRP 全名:Fast Reverse Proxy。FRP 是一个使用 Go 语言开发的高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务。FRP 支持 TCP、UDP、HTTP、HTTPS等协议类型,并且支持 Web 服务根据域名进行路由转发。 ** FRP 的作用 ** 利用处于内网或防火墙后的机器,对外网环境提供 HTTP 或 HTTPS 服务。 对于 HTTP, HTTPS 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个 80 端口。 利用处于内网或防火墙后的机器,对外网环境提供 TCP 和 UDP 服务,例如在家里通过 SSH 访问处于公司内网环境内的主机。 FRP 安装 FRP 采用 Go 语言开发,支持 Windows、Linux、MacOS、ARM等多平台部署。FRP 安装非常容易,只需下载对应系统平台的软件包,并解压就可用。 这里以 Linux 为例,为了方便管理我们把解压后的目录重命名为 frp : wget https://github.com/fatedier/frp/releases/download/v0.15.1/frp_0.15.1_linux_amd64.tar.gz tar

JAVA设计模式之动态代理

烂漫一生 提交于 2020-01-18 03:07:03
本文转载自: https://www.cnblogs.com/lfdingye/p/7717063.html 作者:lfdingye 转载请注明该声明。 动态 代理模式主要由四个元素共同构成:   1. 接口,接口中的方法是要真正去实现的   2. 被代理类,实现上述接口,这是真正去执行接口中方法的类   3. 代理类,实现InvocationHandler,帮助被代理类去实现方法   4. 测试用例: 举例详解:     1. 接口: public interface Person { void searchHouse(); }   2. 被代理类Master,实现上述接口: public interface Person { void searchHouse(); }   3. 代理类HomeLine,实现InvocationHandler接口 import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class HomeLink implements InvocationHandler{ private Person target; public Object getInstance(Person

JAVA 设计模式 代理模式

99封情书 提交于 2020-01-17 15:14:21
目录 用途 代理模式 (Proxy) 为其他对象提供一种 代理 以控制对这个对象的 访问 。 代理模式是一种 结构型模式 。 结构 图-代理模式结构图 Subject : 定义了 RealSubject 和 Proxy 的公共接口,这样就在任何使用 RealSubject 的地方都可以使用 Proxy 。 abstract class Subject { public abstract void Request(); } RealSubject : 定义 Proxy 所代表的真实实体。 class RealSubject extends Subject { @Override public void Request() { System.out.println("真实的请求"); } } Proxy : 保存一个引用使得代理可以访问实体,并提供一个与 Subject 的接口相同的接口,这样代理就可以用来替代实体。 class Proxy extends Subject { private RealSubject real; @Override public void Request() { if (null == real) { real = new RealSubject(); } real.Request(); } } 应用场景 1、远程代理

设计模式二:结构型模式

对着背影说爱祢 提交于 2020-01-17 09:48:45
一、适配器模式 将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 角色: 目标接口(Target) 待适配的类(Adaptee) 适配器(Adapter) 两种实现方式 : 类适配器:使用多继承 对象适配器:使用组合 适用场景: 想使用一个已经存在的类,而它的接口不符合你的要求 (对象适配器)想使用一些已经存在的子类,但不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。 # coding : utf-8 # create by ctz on 2017/5/25 from abc import abstractmethod, ABCMeta class Payment(metaclass=ABCMeta): @abstractmethod def pay(self, money): raise NotImplementedError class Alipay(Payment): def pay(self, money): print("支付宝支付%s元"%money) class ApplePay(Payment): def pay(self, money): print("苹果支付%s元"%money) #------待适配类------ class WechatPay: def huaqian

Linux搭建Maven私服Nexus3.x环境

眉间皱痕 提交于 2020-01-16 11:36:59
一、Maven介绍 Apache Maven是一个创新的软件项目管理和综合工具。 Maven提供了一个基于项目对象模型(POM)文件的新概念来管理项目的构建,可以从一个中心资料片管理项目构建,报告和文件。 Maven最强大的功能就是能够自动下载项目依赖库。 Maven提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期。 在多个开发团队环境时,Maven可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,Maven让开发人员的工作更轻松,同时创建报表,检查,构建和测试自动化设置。 Maven项目的结构和内容在一个XML文件中声明,pom.xml 项目对象模型(POM),这是整个Maven系统的基本单元。 1、Maven提供了开发人员的方式来管理: 1)Builds 2)Documentation 3)Reporting 4)Dependencies 5)SCMs 6)Releases 7)Distribution 8)mailing list 概括地说,Maven简化和标准化项目建设过程。处理编译,分配,文档,团队协作和其他任务的无缝连接。 Maven增加可重用性并负责建立相关的任务。 Maven最初设计,是以简化Jakarta Turbine项目的建设。在几个项目

Java设计模式6:代理模式

只谈情不闲聊 提交于 2020-01-16 11:20:14
简介 给某对象提供一个代理以控制对该对象的访问。比如访问者不能直接引用目标对象,则使用代理模式可作为访问对象和目标对象之间的中介。 代理模式的结构 抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。 真实主题(Real Subject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。 代理(Proxy)类:提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。 静态代理实现 // 定义抽象主题类 interface HelloWorld { void sayHello ( ) ; } // 真实主题类 class HelloWorldImpl implements HelloWorld { @Override public void sayHello ( ) { System . out . println ( "Hello" ) ; } } // 静态代理类 class HelloWorldProxy implements HelloWorld { private final HelloWorld helloWorld ; public HelloWorldProxy ( HelloWorld helloWorld ) { this . helloWorld =

java技术--代理(proxy)模式

可紊 提交于 2020-01-16 05:49:04
1.代理的意义在于生成代理对象,在服务提供方和使用方之间充当一个媒介,控制真实对象的访问 2.代理分为静态代理和动态代理两种 (1)静态代理需要通过手动或工具生成代理类并编译,代理类和委托类的关系在编译期就已经确定 (2)动态代理允许在运行时动态的创建出代理类及其对象 < 1 > Spring AOP 的主要技术基础就是 Java 的动态代理机制 < 2 > 拦截器主要就是靠动态代理实现 1.它可以简化动态代理的使用 2.只需要知道拦截器接口的使用方法即可,无须知道动态代理的实现细节 < 3 > 拦截器在Spring AOP与Spring MVC中都有应用 1.在 Spring AOP 中: 1.1.针对接口做代理默认使用的是 JDK 自带的 Proxy+InvocationHandler 1.2.针对类做代理使用的是 Cglib 2.在 Spring MVC中: 2.1.主要通过 HandlerInterceptor 接口实现拦截器的功能 2.2. HandlerInterceptor 接口中包含3个方法: 2.2.1.preHandle:执行controller处理之前执行,返回值为true时接着执行postHandle和afterCompletion,返回false则中断执行 2.2.2.postHandle:在执行controller后,ModelAndView 处理前执行

Proxy(代理)-对象结构型模式

人走茶凉 提交于 2020-01-15 21:37:31
1.意图 为其它对象提供一种代理以控制对这个对象的访问。 2.别名 Surrogate. 3.动机 通过Proxy可以达到对一个对象的访问控制。 4.适用性 远程代理 为一个对象在不同地址空间提供局部代表。 虚代理 根据需要创建开销很大的对象。 保护代理 控制对原始对象的访问。 智能指引 取代了指针,它在访问对象时执行一些附加操作。 5.结构 6.代码实例 //Subject.h #include <memory> class Subject { public: virtual void Request() = 0; }; class RealSubject : public Subject { public: void Request(); }; class Proxy : public Subject { public: Proxy(); void Request(); private: std::shared_ptr<Subject> m_pSubject; }; //Subject.cpp #include <iostream> #include "Subject.h" void RealSubject::Request() { std::cout<<"RealSubject Request Exectued" << std::endl; } Proxy::Proxy()

[Java复习] 面试突击 - Spring

微笑、不失礼 提交于 2020-01-15 12:06:25
说说你对Spring 的IoC 机制 的理解? 没有Spring之前: 写一套系统,web服务器,tomcat,一旦启动之后,他就可以监听一个端口号的http请求,然后可以把请求转交给你的servlet,jsp,配合起来使用的,servlet处理请求。 比如在我们的一个tomcat + servlet的这样的一个系统里,有几十个地方,都是直接用MyService myService = new MyServiceImpl(),直接创建、引用和依赖了一个MyServiceImpl这样的一个类的对象。 这个系统里,有几十个地方,都跟MyServiceImpl类直接耦合在一起了。 如果我现在不想要用MyServiceImpl了,我们希望用的是NewServiceManagerImpl,implements MyService这个接口的,所有的实现逻辑都不同了,此时我们很麻烦,我们需要在系统里,几十个地方,都去修改对应的MyServiceImpl这个类,切换为NewServiceManagerImpl这个类。 改动代码成本很大,改动完以后的测试的成本很大,改动的过程中可能很复杂,出现一些bug,此时就会很痛苦。 归根结底,代码里, 各种类之间完全耦合在一起,出现任何一丁点的变动,都需要改动大量的代码 ,重新测试,可能还会有bug。 有Spring之后: Spring IoC,