代理模式

Spring5学习(kuang)

*爱你&永不变心* 提交于 2020-02-20 13:37:56
Spring 一、Spring 1.1 简介 Spring:春天 2002年,首次推出了Spring框架的雏形:interface21框架 Spring框架以interface21框架为基础,经过重新设计,并不断丰富其内涵,于2004年3月24日,发布了1.0正式版本 Rod Johnson ,Spring Framework创始人 Spring理念:使现有的技术更加容易使用 官网:https://spring.io/projects/spring-framework <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.3.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring

JAVA打怪之路 - JAVA反射机制

谁说胖子不能爱 提交于 2020-02-19 11:42:13
JAVA反射机制 一、Java反射机制概述( Java Reflection ) 反射相关的主要API: 二、理解Class类并获取Class的实例 ① 理解Class类(描述类的类) 在Object类中定义了以下的方法,此方法将被所有子类继承: ● public final Class getClass() , 以上的方法返回值的类型是一个Class类,此类是Java反射的源头,即:可以通过对象反射求出类的名称。 ② Class类的常用方法 ③ 获取Class类实例的四种方式 ④ 哪些类型可以有Class对象? 三、类的加载与ClassLoader的理解 ① 类的加载过程 ② ClassLoader(类加载器) 类加载器作用是用来把类(class)装载进内存的。JVM 规范定义了如下类型的类的加载器。 ③ 代码示例: //1.获取一个系统类加载器 ClassLoader classloader = ClassLoader.getSystemClassLoader(); System.out.println(classloader); //2.获取系统类加载器的父类加载器,即扩展类加载器 classloader = classloader.getParent(); System.out.println(classloader); //3.获取扩展类加载器的父类加载器,即引导类加载器

spring面向切面编程(AOP)

谁说我不能喝 提交于 2020-02-19 04:04:29
AOP(Aspect Oriented Programing)面向切面编程 AOP是一种编程范式,隶属于软工范畴,指导开发 者如何组织程序结构 AOP弥补了OOP的不足,基于OOP基础之上进行 横向开发 AOP联盟 一、OOP范式编程 OOP规定程序开发以类为模型,一切围绕对象进行, OOP中完成某个任务首先构建模型,基于模型展开 业务 OOP主要应用于WEB开发,围绕OOP的主思想, 对开发过程进行了分层设计 二、AOP范式编程 AOP范式编程研究的不是层与层之间的关系,也不 是每层内部如何开发,AOP主要关注同一层面的各 个不同功能模块之间的共性功能。 AOP时代的到来,使开发模块化的思想进行了进一 步的提升,从刀耕火种的纯手工开发阶段,向半自 动化/自动化阶段进行了一个大的突破。IT研发朝着 “插拔式组件体系结构”又近了一步。 三、基本概念(重点) 1、连接点(Joinpoint) 2、切入点(Pointcut) 3、通知(Advice) 4、目标对象(Target Object) 5、AOP代理(AOP Proxy) 6、织入(Weaving) 7、切面(Aspect) 1、连接点(Joinpoint) ①、程序运行过程中,JVM负责程序运行。执行到某个 方法时,JVM能识别当前执行的是哪个方法。这些 定义在类中的方法,每个具有独立的功能,在AOP 中

java动态代理(JDK和cglib)详解

岁酱吖の 提交于 2020-02-19 03:37:16
JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 按照代理的创建时期,代理类可以分为两种。 静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。 动态代理:在程序运行时,运用反射机制动态创建而成。 首先看一下静态代理: 1、Count.java Java代码 package net.battier.dao; /** * 定义一个账户接口 * * @author Administrator * */ public interface Count { // 查看账户方法 public void queryCount(); // 修改账户方法 public void updateCount(); } 2、CountImpl.java Java代码 package net.battier.dao.impl; import net.battier.dao.Count; /** * 委托类(包含业务逻辑) * * @author

代理模式

耗尽温柔 提交于 2020-02-18 18:28:56
代理模式 一个类拥有另一个类的功能。 介绍 意图: 为类提供一种代理以控制对这个类的访问 使用场景: 访问一个类时想做一些访问控制 关键代码 目标类和代理类相结合 优点: 保护目标对象 扩展性高 职责清晰 缺点: 处理速度变慢 实现可能会比较复杂 注意: 与装饰器模式区别: 1.侧重于访问控制 2.侧重于自己增加功能 使用 静态代理 /** * 具体功能 * @author 98543 */ public interface Func { public void work(); public void eat(); } /** * 具体对象 * @author 98543 */ public class Targer implements Func{ @Override public void eat() { System.out.println("走啊,去吃饭"); } @Override public void work() { System.out.println("走啊,去工作"); } } /** * 代理对象 * @author 98543 */ public class Worker implements Func{ private Targer laozong; private Vistor vistor; public Worker(Targer laozong

JavaScript设计模式之代理模式

最后都变了- 提交于 2020-02-17 06:39:13
代理模式 设计模式的概念都是较为抽象的,下面通过几个实例展示代理模式的实际应用 虚拟代理:常见 保护代理 保护代理比较少见,比如后台提供的上传图片接口 uploadImg ,后台接受请求后,在 uploadImg 中过滤 gif 格式的图片,如果是预期的图片格式,那么调用真正的保存图片方法 saveImage 这种可以理解为保护代理。 代理模式的实际应用 函数节流 const throttle = ( fn , wait ) => { let startTime = Date . now ( ) ; return function ( ) { if ( Date . now ( ) - startTime > wait ) { fn . apply ( null , arguments ) startTime = Date . now ( ) ; } } } function handleScroll ( ) { // 获取滚动位置 let pos = document . documentElement . scrollTop || document . body . scrollTop console . log ( `当前滚动位置: ${ pos } ` ) } // window.addEventListener('scroll', handleScroll) window

maven配置详解

怎甘沉沦 提交于 2020-02-17 04:57:17
settings.xml 本篇文章主要对maven中setting.xml配置文件进行解释 1.声明规范 <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> 2.localRepository <!-- 本地仓库的路径。默认值为 --> <localRepository>/opt/repository</localRepository> 3.interactiveMode <!--Maven是否需要和用户交互以获得输入。如果Maven需要和用户交互以获得输入,则设置成true,反之则应为false。默认为true。--> <interactiveMode>true</interactiveMode> 4.usePluginRegistry <!--Maven是否需要使用plugin-registry.xml文件来管理插件版本。如果需要让Maven使用文件来管理插件版本,则设为true。默认为false。

全面了解 Nginx 主要应用场景

时光总嘲笑我的痴心妄想 提交于 2020-02-15 23:58:00
作者:RayeBlog https://raye.wang/ 前言 本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解到过得。所以还请见谅,同时欢迎留言交流 Nginx能做什么 反向代理 负载均衡 HTTP服务器(包含动静分离) 正向代理 以上就是我了解到的Nginx在不依赖第三方模块能处理的事情,下面详细说明每种功能怎么做 反向代理 反向代理应该是Nginx做的最多的一件事了,什么是反向代理呢,以下是百度百科的说法:反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。 简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已。下面贴上一段简单的实现反向代理的代码 server { listen 80; server_name localhost; client_max_body_size 1024M; location / { proxy_pass http:/

Spring 的学习6_______静态代理和动态代理(AOP的底层实现原理)

六眼飞鱼酱① 提交于 2020-02-15 14:41:15
代理模式可分为静态代理,动态代理。 1.静态代理: 静态代理的角色分析: 1.真实对象; 2.代理真实对象的对象(代理对象)一般会添加一些附加的操作; 3.真实对象和代理对象抽象出来的公共部分(一般为抽象类或者接口); 4.用户(通过代理对象来调用真实对象的方法)。 静态代理的一个代码案例: 情景模型:你(用户)通过租房中介(代理对象)从房东(真实对象)进行租房的活动。 真实对象(Host) //真实对象 public class Host implements Rent { public void rent() { System.out.println("Host 租房子啦!"); } } 代理对象: //代理对象 public class Proxy implements Rent { private Host host; public Proxy(Host host) { this.host = host; } public void rent() { lookHouse(); host.rent(); fare(); } //代理对象添加的额外的操作 public void lookHouse(){ System.out.println("带你一起去看看房子!"); } public void fare(){ System.out.println("交易结束,请按时付款!"

STOMP

你。 提交于 2020-02-15 11:11:01
简介 直接使用WebSocket(或SockJS)就很类似于使用TCP套接字来编写Web应用。因为没有高层级的线路协议(wire protocol),因此就需要我们定义应用之间所发送消息的语义,还需要确保连接的两端都能遵循这些语义。 ​ 就像HTTP在TCP套接字之上添加了请求-响应模型层一样,STOMP在WebSocket之上提供了一个基于帧的线路格式(frame-based wire format)层,用来定义消息的语义。 ​ 与HTTP请求和响应类似,STOMP帧由命令、一个或多个头信息以及负载所组成。例如,如下就是发送数据的一个STOMP帧: >>> SEND transaction:tx-0 destination:/app/marco content-length:20 {"message":"Marco!"} ​ 在这个例子中,STOMP命令是send,表明会发送一些内容。紧接着是三个头信息:一个表示消息的的事务机制,一个用来表示消息要发送到哪里的目的地,另外一个则包含了负载的大小。然后,紧接着是一个空行,STOMP帧的最后是负载内容。 服务端实现 启用STOMP功能 ​ STOMP 的消息根据前缀的不同分为三种。 如下: 以 /app 开头的消息都会被路由到带有@MessageMapping 或 @SubscribeMapping 注解的方法中; 以/topic 或