代理模式

jdk动态代理实现原理

匿名 (未验证) 提交于 2019-12-03 00:27:02
JDK动态代理 JDK动态代理是代理模式的一种实现方式,其只能代理接口。 使用步骤 1、 新建一个接口 2、 为接口创建一个实现类 3、 创建代理类实现java.lang.reflect.InvocationHandler接口 4、 测试 简单案例 根据使用步骤: 首先新建一个接口Subject package com.lnjecit.proxy; /** * Subject * 抽象主题接口 * @author * @create 2018-03-29 14:16 * */ public interface Subject { void doSomething(); } /** * RealSubject * 真实主题类 * @author * @create 2018-03-29 14:21 * */ public class RealSubject implements Subject { @Override public void doSomething() { System.out.println( "RealSubject do something" ); } } package com.lnjecit.proxy.dynamic.jdk; import java.lang.reflect.InvocationHandler; import java.lang

纯代码配置`SSM`框架 (一)

匿名 (未验证) 提交于 2019-12-03 00:22:01
SSM 框架是由三套框架整合起来的。分别是 Spring 、 Spring MVC 、 Mybatis 。 Spring 是一个控制反转( IoC )和面向切面( AOP )的容器框架,适用于任何 Java 应用。 控制反转( IoC )是指对象的创建权交给 Spring 容器,其作用是实现了程序的解耦合,对象创建的控制权不是 使用者 ,而是 框架 或者 容器 。例如:想要调用类里面一个非静态方法,首先要通过 new 实例化一个对象,然后通过这个实例调用相关的方法 method 。但是在 Spring 中, Spring 创建对象的过程,不是在代码里面实现的,而是交给 Spring 来进行配置实现的,其基本原理就是 XML配置文件+SAX解析+工厂设计模式 ; OOP 技术,允许开发者定义纵向的关系,但并不适合定义横向的关系。 AOP 技术,将那些影响了多个类的公共行为封装到一个可复用模块,这个就是所谓的 切面(Aspect) 。 切面 是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。最常见的使用到 AOP 技术就是日志功能。 连接点( Joinpoint ):被拦截到的点可能是 字段 、 构造器 、或者 方法 。 Spring 只支持方法类型的连接点。 横切关注点:对哪些方法进行拦截

GOF(一) 代理模式(Proxy pattern)

匿名 (未验证) 提交于 2019-12-03 00:22:01
核心作用 通过代理,控制对对象的访问。 可以详细控制某个(某类)对象的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理(AOP面向切面的微观实现),从而将统一流程放到代理类中处理。 核心角色 抽象角色 : 定义代理角色和真实角色的公共对外方法。 真实角色 : 实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色使用。 代理角色 : 实现抽象角色,是真实角色的代理(即,持有对真实角色的引用),通过真实角色的业务逻辑来实现抽象方法,可以附加自己的操作。 分类 静态代理:静态定义代理类 动态代理:动态生成代理类 静态代理的实现 以明星唱歌为例,假设流程如下:面谈――签合同――订票――唱歌(明星本人)――收款 1.定义抽象角色 package Proxy . staticProxy ; /** * 抽象角色:定义代理角色和真实角色的公共对外方法 * @author baka * */ public interface Star { /** * 面谈 */ public void confer (); /** * 签合同 */ public void signContract (); /** * 订票 */ public void bookTicket (); /** * 唱歌 */ public void sing (); /** * 收款 */ public void

浅谈SpringAOP的两种实现技术

匿名 (未验证) 提交于 2019-12-03 00:19:01
AOP(Aspect Oriented Programming)的出现是为了解决面向对象语言程序设计中的离散却又耦合的冗余代码,AOP是OOP(Oriented Object Programming)设计思想的补充,OOP解决了程序中“纵向”代码冗余问题,AOP要解决类与类之间“横向”的代码冗余问题,设计中诸如:log、安全验证、性能监控、权限验证、事务等需求都会在类中方法造成大量代码重复。Java设计模式中Decorator可以在少量修改中起到一定作用,但是如果牵连模块过多,使用Decorator也将是一个大工程,装饰者模式不是解决此类问题的明智之举。 AOP有两种实现技术,其一是反射+Proxy动态代理,其二是利用Cglib实现代理。 反射+Proxy动态代理无需添加第三方依赖,但是效率上会付出代价,有实验数据表明,调用反射比直接调用方法的开销至少大10倍。动态代理要求被代理类和代理类实现同样一个接口,Proxy生成的对象是对接口一致的,而不是对象一致。 下面实现Java中自带的Proxy动态代理: package com ; public interface Advice { void before () ; void after () ; } package com ; import java . lang . reflect . InvocationHandler ;

Spring框架 --- 深入

血红的双手。 提交于 2019-12-03 00:11:01
1.Spring IOC    IOC技术: 控制反转,也叫(依赖注入)   控制反转:Bean的生命周期不受你控制,而是交给Spring容器管理。   Spring框架如何利用IOC ?:   实现了控制反转,Spring容器能帮我们实例化对象,但是并没有做到DI(依赖注入)。   作用: (1) 构建Bean (2) Bean之间有依赖关系的话,可以自动帮我们注入 优势: 解耦:低耦合,实现面向接口的编程思想 2.Spring AOP    动态代理设计模式   原理和静态代理设计模式没有本质区别:    被代理类、代理类、被代理和代理类是同一个接口   代理类的创建过程有区别:   (1)静态代理:    自己编写代理类,代理类自己实现接口   (2)动态代理:    代理类不需要自己编写,他Proxy.newProxyinstance(xx)静态方法   在程序执行过程中,动态产生代理类   InvocationHandler:里边含有被代理类的引用    AOP:面向切面的编程   代理模式主要的作用:    在业务代码不之情的情况下,切入额外的功能。 原理:Spring框架具有IOC的功能,所以我们可以利用该功能配置业务Bean 。 代理设计模式(动态) 例如: AccountServiceImpl <bean id="AccountServiceImpl" class

爬虫介绍

匿名 (未验证) 提交于 2019-12-03 00:08:02
Ŀ¼ 网络爬虫 (又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。 数据来源 企业产生的用户数据:百度指数、阿里指数、TBI腾讯浏览指数、新浪微博指数 数据平台购买数据:数据堂、国云数据市场、贵阳大数据交易所 政府/机构公开的数据:中华人民共和国国家统计局数据、世界银行公开数据、联合国数据、纳斯达克。 数据管理咨询公司:麦肯锡、埃森哲、艾瑞咨询 爬取网络数据:如果需要的数据市场上没有,或者不愿意购买,那么可以选择招/做一名爬虫工程师,自己动手丰衣足食。 学习内容 Python基础语法学习(基础知识) HTML页面的内容抓取(数据抓取) HTML页面的数据提取(数据清洗) Scrapy框架以及scrapy-redis分布式策略(第三方框架) 爬虫(Spider)、反爬虫(Anti-Spider)、反反爬虫(Anti-Anti-Spider)之间的斗争.... 根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种. 通用爬虫 通用搜索引擎(Search Engine)工作原理 通用网络爬虫 从互联网中搜集网页,采集信息,这些网页信息用于为搜索引擎建立索引从而提供支持,它决定着整个引擎系统的内容是否丰富,信息是否即时

Java设计模式:Proxy(代理)模式

旧城冷巷雨未停 提交于 2019-12-03 00:07:02
概念定义 代理模式是一种使用代理对象来执行目标对象的方法并在代理对象中增强目标对象方法的一种设计模式。 使用代理模式的原因有: 中介隔离作用:在某些情况下,一个客户类 不想或者不能直接引用 一个委托对象,而代理对象可以在客户类和委托对象之间起到 中介 的作用(代理类和委托类实现相同的接口)。以现实生活为例,经纪人就是明星的代理,外界可以通过联系经纪人来间接与明星沟通。 开放封闭原则:可以通过给代理类增加额外的功能来扩展委托类的功能,这样只需要修改代理类而不需要再修改委托类,符合开闭原则。代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后对返回结果的处理等。代理类本身并不真正实现服务,而是同过调用委托类的相关方法,来提供特定的服务。使用代理模式,可以在调用委托类业务功能的前后加入一些公共的服务(例如鉴权、计时、缓存、日志、事务处理等),甚至修改委托类的业务功能。 代理可以分为静态代理和动态代理,前者更接近代理模式的本质。 静态代理是由程序员编写代理类的源码,再编译代理类。所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就已确定。 动态代理是代理类的源码是在程序运行期间由编译器动态的生成(如JVM根据 反射 等机制生成代理类)。代理类和委托类的关系在程序运行时确定。 应用场景 需要修改或屏蔽 一个或若干 类的部分功能

Spring复习

匿名 (未验证) 提交于 2019-12-03 00:05:01
文章目录 Spring介绍 Spring优点 Spring概念 IOC思想 DI Spring AOP 思想应用 Spring底层实现: 动态代理 基于代理类的AOP AOP名词 AspectJ开发 Spring的核心容器 BeanFactory(过时) ApplicationContext BeanFactory 和 ApplicationContext 的区别: Bean id 属性和 name 属性标签的配置 scope 属性:Bean 的作用范围. Bean 的生命周期的配置: Spring 生成 Bean 的时候三种方式(了解) Spring 的 Bean 的属性注入(XML) Spring 的 Bean 的属性注入(注解) Bean 的作用范围的注解: Bean 的生命周期的配置: Spring 的 Bean 管理的方式的比较 Spring 提供了很多持久层技术的模板类简化编程 Spring 进行事务管理一组 API Spring介绍 Spring是一站式的轻量级Java开源框架,Spring框架性质是属于容器性质的,容器中装什么对象就有什么功能,提供了JavaEE各层的解决方案。实现了工厂模式的工厂类(ApplicationContext)。 表现层:Spring MVC 持久层:JdbcTemplate、ORM框架整合 业务层:IOC、AOP、事务控制 一站式

设计模式结构性模式之代理模式

匿名 (未验证) 提交于 2019-12-02 23:43:01
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。 介绍 意图 为其他对象提供一种代理以控制对这个对象的访问。 主要解决 在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。 何时使用 想在访问一个类时做一些控制。 如何解决 增加中间层。 关键代码 实现与被代理类组合。 应用实例 1、Windows 里面的快捷方式。 2、猪八戒去找高翠兰结果是孙悟空变的,可以这样理解:把高翠兰的外貌抽象出来,高翠兰本人和孙悟空都实现了这个接口,猪八戒访问高翠兰的时候看不出来这个是孙悟空,所以说孙悟空是高翠兰代理类。 3、买火车票不一定在火车站买,也可以去代售点。 4、一张支票或银行存单是账户中资金的代理。支票在市场交易中用来代替现金,并提供对签发人账号上资金的控制。 5、spring aop。 优点 1、职责清晰。 2、高扩展性。 3、智能化。 缺点 1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。 2

代理模式讲解

匿名 (未验证) 提交于 2019-12-02 23:38:02
我们现在来学习代理模式,我们首先看一下代理模式的定义与类型,他的定义是说,为其他对象提供一种代理,以控制对这个对象的 访问,代理对象在客户端和目标对象之间呢,起到一个中介的作用,那这句话如何理解,就和我们租房子是一样的,假设我们找中介, 租房子,然后呢租那种全托管的房子,最后出租出来的房子呢,是房东,房东呢,就是目标对象,那水电费结算,都是代理类来做的, 代理类就是中介,但是我们直接可以和代理,也就是和租房中介来签租房合同,不需要和房东直接接触,也就是中介代理房东, 来和我们签这个合同,并且他对目标对象进行了一个增强,例如在签合同之前,先草拟合同,签完合同之后呢,还进行了一些水电费 核算的,这些工作,那这两点可以理解成,租房子的一些方法,对他的一个增强,那你们学Spring都用过AOP,那AOP就是面向切面编程, OOP就是面向对象编程,那AOP里面的before和after,就可以理解成before就是草拟合同,after就是水电费结算,而要增强的目标方法呢, 正是租房子这种行为,那他的类型是结构型 然后我们来看一下代理的适用场景,首先保护目标对象,例如租房子,我们可能连房东面都没见过, 房东长什么样我们都不知道,然后呢增强目标对象,那增强目标对象呢,这里面范围也比较大,比如增强 目标对象的一个租房子,这个行为方法,也是增强目标对象 那我们可以看一下代理对象的优点有哪些呢