代理模式

【源码分析】01-Spring源码-AOP

爱⌒轻易说出口 提交于 2019-12-27 00:41:19
知识点1:SpringAOP原理 1、 什么是AOP编程 AOP: Aspect Oriented Programming 面向切面编程。   面向切面编程(也叫面向方面):Aspect Oriented Programming(AOP),是目前软件开发中的一个热点。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 AOP是OOP的延续,是(Aspect Oriented Programming)的缩写,意思是面向切面(方面)编程。   主要的功能是: 日志记录,性能统计,安全控制,事务处理,异常处理 等等。   主要的意图是:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。   可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。 假设把应用程序想成一个立体结构的话,OOP的利刃是纵向切入系统,把系统划分为很多个模块(如:用户模块,文章模块等等),而AOP的利刃是横向切入系统

使用JDK动态代理实现装饰器

僤鯓⒐⒋嵵緔 提交于 2019-12-26 23:11:21
使用JDK动态代理实现装饰器 众所周知,装饰器模式和代理模式非常类似,只不过一个是为了增强功能,一个是访问控制。 最近在做一个项目,中间遇到了这么一个需求,在运行时动态的给一个类新增接口。 假设现有的类A是接口 IA 的实现,期望其能够增加接口 IB 的实现,为了使用 IB 的方法,首先需要先实现这个方法,可以使用接口默认实现,然后声明一个匿名类实现,不过为了简单起见,创建了一个类 B,其实现了接口 IB。 class Main { static interface IA { void a ( ) ; } static interface IB { void b ( ) ; } static class A implements IA { @Override public void a ( ) { System . out . println ( "a" ) ; } } static class B implements IB { @Override public void b ( ) { System . out . println ( "b" ) ; } } public static void main ( String [ ] args ) { A a = new A ( ) ; B b = new B ( ) ; Class < ? > [ ] interfaces =

代理模式

做~自己de王妃 提交于 2019-12-26 17:09:41
代理模式 代理模式作为一种比较常用的设计模式,顾名思义,你需要一个牛逼的代理,打个比方,你要是想要接触一些大牌明星,明面上基本上见不着的,这时候你就需要一个访问层,比如她的经理人之类的,间接地传达一些消息,否者会对明星的生活带来很多困扰,基于这种思想,代理模式也就很好理解了,就是为了让你间接地控制一些敏感的对象,八道不胡说,先上代码 IUser.java public interface IUser { public void whoAreYou(); } User.java public class User implements IUser { private String name; public User(String name){ this.name = name; init(); } public void init(){ System.out.println("init:"+name); } @Override public void whoAreYou() { System.out.println("begin:"+name); } } Proxy.java public class Proxy implements IUser { private String name; private User user; public Proxy(String name){

反射原理及动态代理模式

流过昼夜 提交于 2019-12-26 16:02:25
目录 反射原理及动态代理模式 反射(Reflect) Class类 类加载器、构造器、Method、Field 代理模式(静态代理和动态代理) 静态代理 动态代理 使用了动态代理的`Retrofit 反射原理及动态代理模式 反射(Reflect) 反射之中包含了一个「反」字,所以了解反射我们先从「正」开始。 一般情况下,我们使用某个类时必定知道它是什么类,是用来做什么的。于是我们直接对这个类进行实例化,之后使用这个类对象进行操作。 反射则是一开始并不知道我要初始化的类对象是什么,自然也无法使用 new 关键字来创建对象了。这时候,我们使用 JDK 提供的反射 API 进行反射调用。 反射就是在运行时才知道要操作的类是什么,并且可以在运行时获取类的完整构造,并调用对应的方法。 Reflection(反射)是Java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的內部信息,并能直接操作任意对象的内部属性及方法。 Java反射机制主要提供了以下功能: 在运行时构造任意一个类的对象 在运行时获取任意一个类所具有的成员变量和方法 在运行时调用任意一个对象的方法(属性) Java 是一门面向对象的语言。在面向对象的世界里,万事万物皆对象,既然万事万物皆对象,那么我们的类是不是对象呢?我们写的每一个类都可以看成一个对象,是 java.lang

Hadoop阅读笔记(六)——洞悉Hadoop序列化机制Writable

落爺英雄遲暮 提交于 2019-12-26 02:46:11
  关于Hadoop已经小记了六篇,《Hadoop实战》也已经翻完7章。仔细想想,这么好的一个框架,不能只是流于应用层面,跑跑数据排序、单表链接等,想得其精髓,还需深入内部。   按照《 Hadoop阅读笔记(五)——重返Hadoop目录结构 》中介绍的hadoop目录结构,前面已经介绍了MapReduce的内部运行机制,今天准备入手Hadoop RPC,它是hadoop一种通信机制。    RPC ( Remote Procedure Call Protocol )——远程过程调用协议, 它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议 。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。   不同于其他RPC产品,Hadoop有属于自己RPC组件,依赖于《 Hadoop阅读笔记(六)——洞悉Hadoop序列化机制Writable 》中介绍的 Hadoop Writable类型的支持 。Hadoop Writable接口要求每个实现类都得确保将本类的对象正确 序列化(writeObject)与反序列化(readObject) 。因此,Hadoop RPC使用 Java动态代理与反射 实现对象调用方式

Java之代理模式

帅比萌擦擦* 提交于 2019-12-26 00:04:20
代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法 静态代理 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 package com.teenyda.静态代理;public class Demo1 { public static void main(String[] args) { IInsert stu = new StuDao(); IInsert proxy = new InsertProxy(stu); proxy.insert("insert into p values...."); proxy.update("update stu set ..."); }}interface IInsert { void insert(String sql); void update(String sql);}class InsertProxy implements IInsert { private

《邓哥奇遇记10》—— 设计模式之代理模式

*爱你&永不变心* 提交于 2019-12-25 19:38:44
  常用的设计模式有23种,但是最常见的设计模式却只有七八种,今天我们就来说说最常见的设计模式之一的代理模式。代理模式的核心思想用一句话概述就是:保护被代理的对象,控制访问。   用一句话概述代理模式很简单,但是实际做起来很多同学可能还是不理解代理模式的应用场景,我们今天就用邓哥的例子来说说代理模式究竟是怎么样的~   话说邓哥的四大爱好是抽烟、喝酒、烫头、浪~邓哥出名之后,邓嫂就开始对邓哥严加管教,邓嫂开始充当起了邓哥经纪人的角色~   代理模式很像是经纪人和明星之间的关系,经纪人的重要功能之一就是做一个filter(拦截器),帮助明星挡住外面很多的事情,以达到保护明星的作用。   我们的代理模式也是这样,把原本的对象或者接口保护在里面,不然别人直接访问到,在访问之前要经过重重的过滤,以此来达到保护接口的作用。   这个时候,如果我们想约邓哥出来玩,邓嫂就会果断的拒绝我们~这个消息都不会传到邓哥那里~   在我们的系统中,有很多比较重要的接口需要进行这样的保护,比如支付类接口、用户登录接口等涉及到钱或者用户信息相关的敏感接口,除了接口本身需要有良好的防御能力之外,通常还会有相应的代理来对接口进行保护。   如果来访问的请求参数是异常的就直接返回,不用访问后面的真正接口,从而达到保护接口的目的。   如果我们问的问题是可以让邓哥处理的,邓嫂就会把消息告诉邓哥,然后邓哥再进行处理。

java反射详解和动态代理

筅森魡賤 提交于 2019-12-25 19:05:27
最近闲来无事,刚好看到以前的java反射笔记,这里整理一下,有不足之处还望指出;   在学习java反射机制之前,我们先提出这么一个问题:在Java中,能不能在运行时针对一个Java类,获取它的属性和方法呢?   答案是肯定的,java中解决这个问题就是使用的我们今天需要讲的java反射机制。 1.什么是java反射?   java提供一种在运行时动态的获取class的方法和属性以及参数的机制,这种机制就是反射机制。换言之,java可以加载一个在运行时才得知名称的class,并获得它的详细结构(包括权限,继承类等等)。 在JDK中提供API来实现这种机制,API就是reflection APIs。在下文我们将详细了解reflection APIs 。 2.Reflection API详解   java内部是怎么实现这种机制的呢?让我们来详细看看Reflection API。java反射相关的API都在java.lang.reflect包中。结构图如下:    member接口: 用于获取类的构造方法,字段和成员方法。       AccessibleObject 类 :是 Field、Method 和 Constructor 对象的基类。它提供了将反射的对象标记为在使用时取消默认 Java 语言访问控制检查的能力。(通俗解释一下就是获得了更高的使用权限);        Array

设计模式之代理模式

﹥>﹥吖頭↗ 提交于 2019-12-25 16:26:17
一般有静态代理,动态代理,cglib 1.静态代理 /** * @Author: king * @Date: 2019/12/24 16:08 * @Version 1.0 * 抽象主题 */ public interface IGeometry { public double getArea(); } /** * @Author: king * @Date: 2019/12/24 16:10 * @Version 1.0 * 具体主题 */ public class Triangle implements IGeometry { double sideA, sideB, sideC, area; public Triangle(double sideA, double sideB, double sideC) { this.sideA = sideA; this.sideB = sideB; this.sideC = sideC; } public double getArea() { double p = (sideA + sideB + sideC) / 2.0; area = Math.sqrt(p * (p - sideA) * (p - sideB) * (p - sideC)); return area; } } /** * @Author: king * @Date

JAVA AOP(动态代理)

好久不见. 提交于 2019-12-25 14:05:28
什么是AOP? 简单理解:方法增强。 AOP可以增强方法的功能,而不需要修改原业务代码。 深入理解 从编程语言的角度:处理粒度不同 AOP是对OOP的扩展,OOP(即面向对象编程)能处理的最大粒度是对象,对OOP而言,当需要增强方法的功能时,必须修改类的定义。而AOP能处理的粒度可以深入到对象内部,可以是方法或者字段(Spring暂不支持字段增强),所以AOP可以使我们不用重新定义类,而增强原方法。 从设计模式的角度:AOP进一步降低了模块间的耦合度 使得业务代码和功能性代码分离,降低它们之间的耦合度。 功能性代码,如:事务处理、参数校验、日志、监控、负载均衡 从解放程序员生产力的角度:更少的代码 AOP只需要少量的配置或者注解就可以完成 从代码可读性的角度:业务逻辑更清晰 程序员可以更聚焦于业务逻辑。 AOP的核心是什么? 动态代理 AOP主要是做什么?(动态代理做什么?) 对那些被代理对象的那些方法在方法运行到那些时段做什么增强。 JDK动态代理 JDK动态代理不需要重写实现类,也不需要定义一个实现UserService接口的代理类。而是使用Proxy类帮我们动态生成代理类。 package day05 . Agent2 ; import day05 . Agent . UserService ; import java . lang . reflect . Proxy ;