代理模式

Spring AOP 的相关概念

*爱你&永不变心* 提交于 2019-12-03 17:02:55
1.1AOP 概述 AOP:全称是 Aspect Oriented Programming 即:面向切面编程。 简单的说它就是把我们程序重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的 基础上,对我们的已有方法进行增强。 1.1.2 AOP 的作用及优势 作用: 在程序运行期间,不修改源码对已有方法进行增强。 优势: 减少重复代码 提高开发效率 维护方便 1.1.3 AOP 的实现方式 使用动态代理技术 动态代理 动态代理的特点 字节码随用随创建,随用随加载。 它与静态代理的区别也在于此。因为静态代理是字节码一上来就创建好,并完成加载。 装饰者模式就是静态代理的一种体现。 动态代理常用的有两种方式 基于接口的动态代理 提供者:JDK 官方的 Proxy 类。 要求:被代理类最少实现一个接口。 基于子类的动态代理 提供者:第三方的 CGLib,如果报 asmxxxx 异常,需要导入 asm.jar。 要求:被代理类不能用 final 修饰的类(最终类)。 Spring 中的 AOP 2.1Spring 中 AOP 的细节 2.1.1 说明 我们学习 spring 的 aop,就是通过配置的方式,实现上一章节的功能。 2.1.2 AOP 相关术语 Joinpoint(连接点): 所谓连接点是指那些被拦截到的点。在 spring 中,这些点指的是方法,因为

spring知识汇总

怎甘沉沦 提交于 2019-12-03 16:44:07
1、Spring是什么? Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于XML的配置、基于注解的配置、基于Java的配置。 主要由以下几个模块组成: Spring Core:核心类库,提供IOC服务; Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等); Spring AOP:AOP服务; Spring DAO:对JDBC的抽象,简化了数据访问异常的处理; Spring ORM:对现有的ORM框架的支持; Spring Web:提供了基本的面向Web的综合特性,例如多方文件上传; Spring MVC:提供面向Web应用的Model-View-Controller实现。 2、Spring 的优点? (1)spring属于低侵入式设计,代码的污染极低; (2)spring的DI机制将对象之间的依赖关系交由框架处理,减低组件的耦合性; (3)Spring提供了AOP技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用。 (4)spring对于主流的应用框架提供了集成支持。 3、Spring的AOP理解: OOP面向对象,允许开发者定义纵向的关系

23种常用的设计模式

别等时光非礼了梦想. 提交于 2019-12-03 14:02:12
23种设计模式总体可以分为三类: 一、创建型模式    工厂模式、抽象工厂、单例模式 、建造者模式、原型模式 二、结构型模式    装饰器模式、适配器模式、代理模式 、外观模式、桥接模式、组合模式、享元模式 三、行为型模式    策略模式、观察者模式、模板方法模式 、责任链模式、迭代子模式、备忘录模式、命令模式、访问者模式、中介者模式、状态模式、解释器模式 下面主要介绍以上9种红色字体的设计模式。 (1)工厂模式:定义一个创建对象的接口,让子类决定具体实例化哪一个对象。 public interface Sender{ void sender(); } public class SenderFactory{ //创建简单工厂 public Sender produce(String type){ if(type.equals("mail")){ return new MailSender(); }else if(type.equals("msg")){ return new MsgSender(); }else{ return null; } } } (2)抽象工厂:为一组相关或相互依赖的对象提供一个接口,且无需指定他们的具体实现类。 //定义实现功能的接口 public interface Sender{ void sender(); } //定义生产工厂的接口

Java高级-反射

谁说我不能喝 提交于 2019-12-03 13:44:52
1.如何创建Class的实例 1.1过程:源文件经过编译(javac.exe)以后,得到一个或者多个.class文件。.class文件经过运行(java.exe)这步,就需要进行类的加载(通过JVM的类的加载器),加载到内存中的缓存。每个放入缓存中的.class文件就是Class的实例。 1.2 Class的一个对象,对应着一个运行时类。相当于一个运行时类本身充当了一个Class的一个实例。 1.3 java.lang.Class是反射的源头。接下来涉及到反射的类都在java.lang.reflect子包下。如:Field Method Constructor Type Pacakage..   当通过Class的实例调用getMethods()-->Method,getConstructors()-->Constructor 1.4 实例化 Class的方法(前三种) //1.调用运行时类本身的.class属性 Class clazz1 = Person.class; System.out.println(clazz1.getName()); Class clazz2 = String.class; System.out.println(clazz2.getName()); //2.通过运行时类的对象获取 Person p = new Person(); Class clazz3

oc中的protocol(协议)与delegate(代理)

。_饼干妹妹 提交于 2019-12-03 13:39:48
protocol(协议) 与创建类一样,右击鼠标,选New File,选Objective-C,选protocol(切记!!!),然后写协议名,就可以了。 1.Protocol :就一个用途,用来声明一大堆的方法(不能声明成员变量),不能写实现。 2.只要某个类遵守了这个协议,就拥有了这个协议中的所有方法声明。 3.只要父类遵守了某个协议,那么子类也遵守。 4.Protocol 声明的方法可以让任何类去实现, protocol 就是协议。 5.OC 不能继承多个类(单继承)但是能够遵守多个协议。继承 (:) ,遵守协议( < > ) 6.基协议: <NSObject> 是基协议,是最根本最基本的协议,其中声明了很多最基本的方法。 7.协议可以遵守协议,一个协议遵守了另一个协议,就可以拥有另一份协议中的方法声明。 在这里我们创建了一个协议rensheng #import <Foundation/Foundation.h> @protocol rensheng <NSObject> //可选的 @optional -(void)TVing:(id)xiaoming; //必须实现的 @required -(void)eating:(id)xiaoming; @end 然后我们在people类.h文件里面引用它 #import <Foundation/Foundation.h> /

代理模式

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

设计模式之代理模式

妖精的绣舞 提交于 2019-12-03 13:23:38
代理模式 通过代理控制对象的访问,可以详细访问某个对象的方法,在这个方法调用处理,或调用后处理。既(AOP微实现) ,AOP核心技术面向切面编程。 1、代理模式应用场景 SpringAOP、事物原理、日志打印、权限控制、远程调用、安全代理 可以隐蔽真实角色 2、代理的分类 静态代理(静态定义代理类) 动态代理(动态生成代理类) Jdk自带动态代理 Cglib 、javaassist(字节码操作库) 3、静态代理 由程序员创建或工具生成代理类的源码,再编译代理类。所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。 1)、静态代理代码 public interface IUserDao { void save(); } public class UserDao implements IUserDao { public void save() { System.out.println("已经保存数据..."); } } 代理类 public class UserDaoProxy implements IUserDao { private IUserDao target; public UserDaoProxy(IUserDao iuserDao) { this.target = iuserDao; } public void save() {

Mybatis源码解析(一) —— mybatis与Spring时如何整合的?

旧巷老猫 提交于 2019-12-03 11:22:38
Mybatis源码解析(一) —— mybatis与Spring时如何整合的?   从大学开始接触mybatis到现在差不多快3年了吧,最近寻思着使用3年了,我却还不清楚其内部实现细节,比如: 它是如何加载各种mybatis相关的xml? 它是如何仅仅通过一个Mapper接口 + Mappe.xml实现数据库操作的(尽管很多人可能都清楚是通过代理实现,但面试时一旦深入询问:比如Mapper的代理类名是什么?是通过JDK还是cglib实现?)? 在同一个方法中,Mybatis多次请求数据库,是否要创建多个SqlSession会话? 它与Spring是如何适配(整合)的? 在Spring中是如何保障SqlSession的生命周期的? 等等一系列的问题。。。   如果以上问题你自认为无法回答,或者说了解一些,那么就从现在开始,我们来一一揭开这层面纱。 一、Mybatis:最简单测试Demo   相信只要用过Mybatis的同学看到下面的代码一定不会陌生,如果不清楚的可以看下 官网文档 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new

Java动态代理

会有一股神秘感。 提交于 2019-12-03 07:34:20
特点:字节码随用随创建,随用随加载。(不同于装饰模式) 作用:不修改源码的基础上对方法增强 分类: 基于接口的动态代理 基于子类的动态代理 基于接口的动态代理: 涉及的类:Proxy;提供者:JDK官方 如何创建代理对象:使用Proxy类中的newProxyInstance方法 创建代理对象的要求:被代理类最少实现一个接口,如果没有则不能使用 newProxyInstance方法的参数: ClassLoader :它是用于加载代理对象字节码的,和被代理对象使用相同的类加载器 Class<?>[] :它是用于让代理对象和被代理对象有相同方法 InvocationHandler :它是让我们写如何代理,我们一般都是写一个该接口的实现类,通常情况下都是使用匿名内部类,此接口的实现类都是谁用谁写。 最主要的是去实现InvocationHandler 中的invoke方法。 public static void main(String[] args) { final Producer producer = new Producer(); IProducer iProducer = (IProducer) Proxy.newProxyInstance(Producer.class.getClassLoader(), Producer.class.getInterfaces(), new

Spring面试题一

烈酒焚心 提交于 2019-12-03 07:26:13
1、Spring是什么? Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于XML的配置、基于注解的配置、基于Java的配置。 主要由以下几个模块组成: Spring Core:核心类库,提供IOC服务; Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等); Spring AOP:AOP服务; Spring DAO:对JDBC的抽象,简化了数据访问异常的处理; Spring ORM:对现有的ORM框架的支持; Spring Web:提供了基本的面向Web的综合特性,例如多方文件上传; Spring MVC:提供面向Web应用的Model-View-Controller实现。 2、Spring 的优点? (1)spring属于低侵入式设计,代码的污染极低; (2)spring的DI机制将对象之间的依赖关系交由框架处理,减低组件的耦合性; (3)Spring提供了AOP技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用。 (4)spring对于主流的应用框架提供了集成支持。 3、Spring的AOP理解: OOP面向对象,允许开发者定义纵向的关系