动态代理

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

Spring Day03 AOP

只愿长相守 提交于 2020-01-18 02:10:10
1.Spring 的 AOP 简介 1.1 什么是 AOP AOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 AOP 是 OOP 的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 1.2 AOP 的作用及其优势 作用:在程序运行期间,在不修改源码的情况下对方法进行功能增强 优势:减少重复代码,提高开发效率,并且便于维护 1.3 AOP 的底层实现 实际上,AOP 的底层是通过 Spring 提供的的动态代理技术实现的。在运行期间,Spring通过动态代理技术动态的生成代理对象,代理对象方法执行时进行增强功能的介入,在去调用目标对象的方法,从而完成功能的增强。 1.4 AOP 的动态代理技术 常用的动态代理技术 JDK 代理 : 基于接口的动态代理技术 cglib 代理:基于父类的动态代理技术 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GID0L2KN-1578710358957)(img\图片1.png)] 1.5 JDK 的动态代理 ①目标类接口 public

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 处理前执行

[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,

23种设计模式(6):代理模式

烈酒焚心 提交于 2020-01-15 09:35:54
目录 1.概念 2.程式范例 2.1巫师 2.2塔接口 2.3象牙塔实现类 2.4象牙塔的代理类(相当于例子的门卫) 2.5客户端调用者 2.6结果打印 2.7.小结 3.jdk动态代理模式 3.1 InvocationHandler接口 3.2Proxy类 3.3程式范例 4.CGLIB动态代理模式 4.1程式范例 1.概念 定义:为另一个对象提供代理,以控制外界对其的访问。 ​ 维基百科上的对代理模式是这样解释的,代理是客户端正在调用的包装器或代理对象,以访问幕后的真实服务对象。代理的使用可以简单地转发到真实对象,也可以提供其他逻辑。在代理中,可以提供额外的功能,例如在对实际对象的操作占用大量资源时进行缓存,或者在对实际对象的操作被调用之前检查先决条件。 ​ 我们举一个例子加以说明,从前有一个象牙塔,当地的巫师都去那里学习法术。随着时间的推移,当地学习法术的巫师越来越多,最后造成每天的 象牙塔人满为患 。于是请来了两个力大无比的 门卫战士 ,他们规定每次 只能进去三个巫师 进行学习。于是,这两个门卫战士就像是象牙塔的代理,代理代表塔的访问出入权限并向其添加访问控制。 简而言之,使用代理模式,用一个类表示另一个类的功能。 2.程式范例 2.1巫师 public class Wizard { private String name ; public Wizard ( String

杭-Spring/Spring MVC

回眸只為那壹抹淺笑 提交于 2020-01-14 08:56:34
Spring 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.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.Spring提供了AOP技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用。 5.容器提供了众多的辅助类,能加快应用的开发 6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA

代理模式

戏子无情 提交于 2020-01-13 18:11:32
代理模式 经过学习整理后来输出心得 静态代理 public interface Person { void findLove ( ) ; } public class Son implements Person { @Override public void findLove ( ) { System . out . println ( "找美女" ) ; } } //父亲就是儿子的代理类 public class Father implements Person { private Son son ; public Father ( Son son ) { this . son = son ; } @Override public void findLove ( ) { before ( ) ; son . findLove ( ) ; after ( ) ; } void before ( ) { System . out . println ( "开始物色" ) ; } void after ( ) { System . out . println ( "结束" ) ; } } public class Test { public static void main ( String [ ] args ) { Father father = new Father ( new

JDK动态代理与CGLIB动态代理

爱⌒轻易说出口 提交于 2020-01-13 08:23:24
JDK动态代理和CGLIB动态代理是SpringAOP非常重要的两个概念,SpringAOP是通过生成目标对象的代理类来实现对目标对象的增强,在说JDK的动态代理之前我们先来回顾一下静态代理: 一、静态代理: 首先定义一个业务接口 public interface ITestService { void sayHello(); String getMsg(); } 然后我们编写一个简单的实现类: public class TestServiceImpl implements ITestService{ @Override public void sayHello() { System.out.println("TestServiceImpl sayHello"); } @Override public String getMsg() { return "TestServiceImpl Msg"; } } 然后我们再编写一个代理类用来代理TestServiceImpl: public class TestServiceProxy implements ITestService { private ITestService target; public TestServiceProxy(ITestService testService) { this.target =

高级java面试题记录(六)

半城伤御伤魂 提交于 2020-01-10 14:42:56
1 SpringAOP的应用场景?Spring bean的生命周期?是否看过Spring的源码? 2 JVM垃圾收集器有哪些?说说各自的应用场景?平常工作中遇到过内存溢出吗?怎么解决的? 3 Linux中如何排除tomcat假死?如何查看某段时间内的日志?怎么查看文件的大小? 4 动态代理中cglib和JDK动态代理的区别?应用场景? 5 JVM加载类的过程?说说双亲委派?反射在项目中有那些应用? 来源: CSDN 作者: bugSeeking 链接: https://blog.csdn.net/danger0629/article/details/103922785

[Spring框架]Spring AOP基础入门总结一.

﹥>﹥吖頭↗ 提交于 2020-01-10 07:30:35
[Spring框架]Spring AOP基础入门总结一. 前言: 前面已经有两篇文章讲了Spring IOC/DI 以及 使用xml和注解两种方法开发的案例, 下面就来梳理一下Spring的另一核心AOP. 一, 什么是AOP 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过 预编译 方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是 OOP 的延续,是软件开发中的一个热点,也是 Spring 框架中的一个重要内容,是 函数式编程 的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的 耦合度 降低,提高程序的可重用性,同时提高了开发的效率。 AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码. Spring AOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类织入增强代码. 二,AOP开发中的专业术语 Joinpoint(连接点) :所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点. Pointcut(切入点): 所谓切入点是指我们要对哪些Joinpoint进行拦截的定义. Advice(通知/增强) :所谓通知是指拦截到Joinpoint之后所要做的事情就是通知.通知分为前置通知