package com.milenfan.reflect.proxy;
/**
* 这是一个接口,目标对像的接口,业务的关注点,重心
* 拿吃饭举例,我只关心吃的过程,但之前的菜是怎么做出来的我并不关心,
* 饭吃完后洗盘子也不关我的事,我的目标就是吃饭
*
*此类是目标对象的接口,必须
*/
public interface EatInterface {
public void eating();
}
package com.milenfan.reflect.proxy;
public class Eatting implements EatInterface{
public void eating() {
System.out.println("我正在吃饭.......");
}
}
package com.milenfan.reflect.proxy;
/**
* 这里相当于一个拦截器,用来处理吃饭前后的事情,或者说是AOP思维中要考虑的问题
* 炒菜,洗盘子都不是我要关心的事情,我只管吃饭,大男子主义吧。。。。
*所以,吃饭和端饭菜,洗盘子在程序里是不相干的事情,怎么把这些不相干的事情联系起来呢,使得能有饭吃,
*并且也能把盘子洗干净呢,这需要动态代理和反射把这两部分不相干的事情联系起来,才能完成整个吃饭的过程
*/
public class Other {
public void before(){
System.out.println("把饭菜端出来...........");
}
public void after(){
System.out.println("把盘子洗干净...........");
}
}
package com.milenfan.reflect.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
*这是一个可以执行拦截器方法,同时也可以通过反射机制动态执行目标对象的方法的类
*
*/
public class Handler implements InvocationHandler{
private Object obj;//目标对象
private Other other = new Other();//拦截器
public void setObj(Object obj) {
this.obj = obj;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result = null;
other.before();
result = method.invoke(obj, args);
other.after();
return result;
}
}
package com.milenfan.reflect.proxy;
import java.lang.reflect.Proxy;
public class MyProxy {
public Object getProxy(Object obj){
Handler handler = new Handler();
handler.setObj(obj);//设置目标对象
return Proxy.newProxyInstance(Eatting.class.getClassLoader(), obj.getClass().getInterfaces(), handler);
}
}
package com.milenfan.reflect.proxy;
public class King {
public static void main(String[] args){
EatInterface target = new Eatting();//目标对象,吃饭
MyProxy myProxy = new MyProxy();
EatInterface proxy = (EatInterface)myProxy.getProxy(target);//动态得到代理对象,完成端饭菜,吃饭,洗盘子
proxy.eating();
}
}
分享到:
相关推荐
在Java编程中,反射和动态代理是两个非常重要的高级特性,它们为程序提供了更大的灵活性和扩展性。这篇学习笔记主要关注动态代理部分,虽然没有提供具体的压缩包文件内容,但根据标题和描述,我们可以深入探讨这两个...
总结,JVM技术是Java程序运行的基础,反射和动态代理则是Java平台强大功能的体现,它们提供了程序运行时的灵活性和可扩展性。理解和掌握这些概念对于优化代码性能、设计灵活的系统架构以及解决实际问题具有重要意义...
总结,Java反射机制是Java平台提供的一种强大的元数据访问能力,而动态代理则是在反射基础上实现的一种高级应用,两者结合使得Java代码更加灵活和可扩展。在实际开发中,理解并熟练运用反射和动态代理,能够帮助我们...
### JAVA的反射机制与动态代理 #### 一、JAVA反射机制概述 JAVA的反射机制是一种强大的功能,允许程序在运行时获取类的信息并操作类的对象。这种能力在很多情况下非常有用,比如在进行框架开发或者需要对未知类型...
总结来说,Java反射机制提供了强大的运行时检查和操作对象的能力,而动态代理则在此基础上实现了对对象行为的动态增强,两者都是Java灵活性和强大性的重要体现。在学习和使用时,理解它们的工作原理,掌握如何安全...
本文将深入探讨两种主要的Java代理实现:JDK动态代理和CGLIB代理。 一、JDK动态代理 JDK动态代理基于接口实现,它要求被代理的类必须实现至少一个接口。在运行时,Java会动态地创建一个新的类,这个类实现了与原始...
### Java反射机制与动态代理详解 #### 一、Java反射机制概述 Java反射机制是一种强大的功能,它使得程序能够在运行时动态地获取类的信息并进行操作。反射是Java语言的一个重要特性,也是Java被视为动态语言的关键...
JAVA 反射机制是 Java 语言中的一种动态获取信息和动态调用对象方法的功能。它允许程序在运行时获取类的信息、构造对象、获取成员变量和方法、调用对象的方法等。 Java 反射机制主要提供了以下功能: 1. 在运行时...
Java动态代理是基于Java反射机制的一种实现方式,它允许我们在运行时动态地创建一个实现了某些接口的新类。Java动态代理主要用于创建代理对象,这些代理对象可以实现在特定时刻的行为增强。 **1. Java动态代理类的...
通过上述内容,我们可以看到类加载机制和动态代理在Java开发中的重要作用。类加载机制确保了类能够正确地被加载到虚拟机中并准备好供程序使用,而动态代理则提供了灵活的方式来增强类的功能,提高代码的可维护性和...
- **增强功能**: 反射提供基础的类和方法操作能力,而动态代理则在此基础上增加了运行时的代码增强功能。 - **组合使用**: 在实际应用中,两者经常结合使用,例如Spring AOP就是利用反射和动态代理实现的切面编程...
总的来说,这份“JAVA反射机制与动态代理综合资料”应该是一个全面的学习资源,涵盖了从基础概念到实际应用的多个方面,对于想要提升Java技能或深入理解J2EE开发的程序员来说,是非常宝贵的学习材料。通过学习和实践...
### Java软件开发实战:反射与动态代理 #### 反射技术概述 反射是Java中一项强大的功能,允许程序在运行时获取类的信息并操作类的对象。这种能力在编写需要高度灵活性的应用程序时非常有用,例如在框架开发中,...
Java动态代理是Java编程中一个重要的特性,它允许我们在运行时创建代理对象,这些代理对象可以作为原有对象的“中间人”,在调用原有方法前或后执行额外的操作,如日志记录、性能监控、事务管理等。动态代理在很多...
Java反射机制详解与应用文档和动态代理部分,主要讲解了如何通过反射实现动态代理,即在运行时创建一个实现了特定接口的新类。这在AOP(面向切面编程)和事件处理中非常有用。Java标准库中的`java.lang.reflect....
- Java动态代理基于Java反射API实现,主要涉及到`java.lang.reflect.Proxy`和`java.lang.reflect.InvocationHandler`两个类。 - `Proxy`类用于创建一个代理对象,而`InvocationHandler`接口定义了调用处理程序,它...