Java 代理机制学习总结

-------<a href="http://www.itheima.com/"">android培训</a>、<a
href="http://www.itheima.com/" ">java培训</a>期待与您交流!----------

Java 代理机制学习总结

在编写程序时,除了要解决核心业务逻辑时还要编写一些与核心业务逻辑相关的系统服务代码。如日志,安全等代码。在没有使用java代理机制时,只能将其与业务代码放置在了一起。但这是于java OOP思想是冲突的。加深了程序间的耦合性。

引入了代理机制就可以避免了这样的问题。

我们可以创建某个类的代理类。打个比方,比如在写代码时我希望监察出某个类的某个方法的运行时间。等项目完成交给客户时我又得必须把监视程序效率的代码去掉。这时用代理机制就方便及了。我可以再程序中引用指向该类的代理类。代理类中引用了被代理类,并加上了监察程序效率运行时间的代码。等项目完成交个客户时,只需在程序中把引用指向被代理类即可。根本不需要改变源代码。

AOP  面向切面编程

在编写应用程序时,发现程序中会穿插很多关于日志,安全等相关的代码中。这些代码并不是核心业务代码,却依赖核心业务代码。所以被放置在了业务代码里。就像一个横穿在程序里的一个切面。

这些与核心业务混在一起的系统服务代码加深了代码与代码之间的耦合性。

AOP  面向切面编程就是要将这些代码从程序中抽离出来(抽离只是从效果上来说),进行模块化。

代理类的特点:

1.代理与被代理类有相同的接口。如果原类没有接口,可以使用第三方类库ELGB中的接口。

2.代理类与被代理类有相同的方法。代理类的系统代码是基于被代理类的方法的。可以将代理类的系统代码放在代理类的方法之前,之后,前后,和代理类的catch语句块中。

动态代理类的创建

在写一个项目时,往往需要的代理类是相当多的。如果都是程序员手动的自己去写代理类,是相当要命的。Java提供了自动传建代理类的技术,可以动态的创件一个类的代理类。

Proxy  代理类

Proxy 提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类。

通常根据其的一个静态方法得到一个类的代理类

static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)

返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序

参数解释

ClassLoader Loader:为生成的代理类实例指定一个类加载器,通常指定为其接口的类加载器。

Class<?>[] Interfaces:代理类与被代理类共同的接口。

InvocationHandler h:?

InvocationHandler 是代理实例的调用处理程序 实现的接口。

该接口只有一个要被实现的方法

Object invoke(Object proxy, Method method, Object[] args)

在代理实例上处理方法调用并返回结果

在该方法里就可以调用被代理对象,加上代理类的系统代码,完成代理类的代理目的。

下面代码演示自动创建一个代理类,其代理目的是算出被代理的一个方法的时间。

-------<a href="http://www.itheima.com/"">android培训</a>、<a
href="http://www.itheima.com/" ">java培训</a>期待与您交流!----------

时间: 2024-11-05 14:47:23

Java 代理机制学习总结的相关文章

JAVA反射机制—学习总结

最近收到很多关于Java反射机制的问题留言,其实Java反射机制技术方面没有太多难点,或许是大家在学习过程中遗漏了细小知识点,导致一些问题无法彻底理解,现在我们简单的总结一下,加深印象. 什么是反射机制? "JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制."我们通过一些例子,更好理解反射机制.Class类 我们知道Java是一门面向对象

java代理模式学习

Java动态代理模式 1. 代理:一个角色代表别一个角色来完成某些特定的功能. 比如:生产商,中间商,客户这三者这间的关系 客户买产品并不直接与生产商打交道,也不用知道产品是如何产生的,客户只与中间商打交道,而中间商就可以对产品进行一些包装,提供一些售后的服务. 代理模式有三个角色: 1. 抽象主题角色 2. 代理主题角色 3. 实际被代理角色 其它类通过访问代理主题角色来访问实际被代理角色. 2. 下面我们来个一个静态代理的实现. 我以一个坦克为例. 抽象主题角色:Moveable Java代

java代理机制简单实现

java代理分静态代理和动态代理,动态代理有jdk代理和cglib代理两种,在运行时生成新的子类class文件.本文主要练习下动态代理,代码用于备忘.对于代理的原理和机制,网上有很多写的很好的,就不班门弄斧了. jdk代理 Java代码下载    import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class Prox

Java反射机制学习笔记

Java反射机制 简介 通过反射API可以获取程序在运行时刻的内部结构.反射API中提供的动态代理可以原生实现AOP中的方法拦截功能.通过反射获取到的Java类内部结构后再进行运用,和直接运用这个类效果相同,但额外的提供了运行时刻的灵活性.反射的最大一个弊端是性能比较差.相同的操作,用反射API所需的时间大概比直接的使用要慢一两个数量级.可以考虑在适当的时机来使用反射API. 基本用法 Java反射机制主要有两个作用.第一个主要作用是获取程序再运行时刻的内部结构.只需要少量的代码就能便利出一个J

Java代理机制之初见(理解及实现)

都知道Java中的Spring,有一重要思想:AOP,也就是Java的动态代理机制.初见代理这个名词时,觉得生活中常有代理的这一说法. 那么,在Java中,代理又是什么呢?它又是如何实现的?实现后是干什么的? 其实啊,Java中的代理也就是生活中代理的意思,我认为,在Java中,代理就是帮助类实现一些修改的动作. 也就是说,用代理类来修改已经存在的类.那么,问题又来了,为何这样做呢?在存在的类上修改不就完事了吗? 首先,这种想法时错的,Java中,已经编译好的类不要随随便便的修改,容易造成整个工

JAVA反射机制学习随笔

JAVA反射机制是用于在运行时动态的获取类的信息或者方法,属性,也可以用来动态的生成类,由于所有类都是CLASS的子类,我们可以用一个CLASS类的实例来实例化各种类 例如: Class<?> class1 = null; Class<?> class2 = null; //写法1, 可能抛出 ClassNotFoundException [多用这个写法] class1 = Class.forName("cn.lee.demo.Person"); System.

Java反射机制学习

Java 反射是Java语言的一个很重要的特征,它使得Java具体了“动态性”. 在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法?答案是肯定的.这种动态获取类的信息以及动态调用对象的方法的功能来自于Java 语言的反射(Reflection)机制. Java 反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类. 在运行时构造任意一个类的对象. 在运行时判断任意一个类所具有的成员变量和方法. 在运行时调用任意一个对象的

java反射机制学习小结

之前一直对java的反射机制理解得很模糊,今天因为学习spring,所以花了些时间总算把它理顺了,记录一下 另外,推荐读读这篇文章,写的挺好的http://blog.csdn.net/woshixuye/article/details/7700455 class Person { private String name; private int age; // public Person(String name,int age){ // this.name=name; // this.age=a

java反射机制学习:初始反射机制

本人小白一枚,想和大家一起分享我学习java的笔记和心得. 反射机制: 指的是可以于运行时加载.探知.使用编译期间完全未知的类. 程序在运行状态中,可以动态加载一个只有名称的类,对于任意一个已加载的类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性: Class clazz = Class.forName(com.danchel.reflect.User); 加载完类之后,在堆内存中,就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象