Java动态代理机制——JDK
动态代理机制是Spring AOP编程的原理基础。
JDK的动态代理机制有个限制就是它只能代理实现了一个或多个接口的类。如PersonImpl得实现Person接口,才能用JDK动态代理机制。
定义一个Person的接口:
package wang.dao;
public interface Person {
public void eat();
public void sleep();
}
定义接口Person的实现类,类的实例就是我们要代理的对象(被代理的对象)
package wang.dao.impl;
import wang.dao.Person;
public class PersonImpl implements Person{
@Override
public void eat() {
System.out.println("吃的方法。。。");
}
@Override
public void sleep() {
System.out.println("睡的方法。。。");
}
}
定义代理处理类。其中主要有以下几点。
1.实现InvocationHandler接口。
2.定义被代理的对象;
3.定义一个方法,将被代理的对象和处理器的实例(this)关联;
4.调用被代理对象的方法。
package wang.proxy; import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy; import com.sun.org.apache.bcel.internal.generic.ReturnaddressType; public class MyProxy implements InvocationHandler {
//2.定义被代理的对象
private Object person;
//3.定义一个方法,将被代理的对象和处理器实例(this)关联。
public Object bind(Object person)
{
this.person = person;
return Proxy.newProxyInstance(this.getClass().getClassLoader(), person.getClass().getInterfaces(),this); } @Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("代理前"); //4.调用被代理对象的方法。
method.invoke(person, args); System.out.println("代理后");
return null;
} }
package wang.test; import wang.dao.Person;
import wang.dao.impl.PersonImpl;
import wang.proxy.MyProxy; public class ProxyTest { /**
* @param args
*/
public static void main(String[] args) { Person person = new PersonImpl();//被代理的对象
MyProxy proxy = new MyProxy();
person = (Person) proxy.bind(person);//
person.eat();
person.sleep(); } }
Java动态代理机制——JDK的更多相关文章
- [转]java动态代理(JDK和cglib)
转自:http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html java动态代理(JDK和cglib) JAVA的动态代理 代理模式 代理 ...
- 详解java动态代理机制以及使用场景
详解java动态代理机制以及使用场景 https://blog.csdn.net/u011784767/article/details/78281384 深入理解java动态代理的实现机制 https ...
- 大厂高级工程师面试必问系列:Java动态代理机制和实现原理详解
代理模式 Java动态代理运用了设计模式中常用的代理模式 代理模式: 目的就是为其他对象提供一个代理用来控制对某个真实对象的访问 代理类的作用: 为委托类预处理消息 过滤消息并转发消息 进行消息被委托 ...
- Java 动态代理机制详解
在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的 ...
- Java 动态代理机制分析及扩展
Java 动态代理机制分析及扩展,第 1 部分 王 忠平, 软件工程师, IBM 何 平, 软件工程师, IBM 简介: 本文通过分析 Java 动态代理的机制和特点,解读动态代理类的源代码,并且模拟 ...
- [转]Java 动态代理机制分析及扩展
引言 Java 动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执 ...
- java动态代理机制
首先了解代理设计模式,其思想是为其他对象提供一种代理以控制对这个对象的访问. java动态代理就是遵循这种思想,spring中的AOP实现原理就是java的动态代理. 在java的动态代理机制中,有两 ...
- Java 动态代理机制分析及扩展--转
http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/#icomments http://www.ibm.com/developerworks/c ...
- Java 动态代理机制分析及扩展,第 1 部分
Java 动态代理机制分析及扩展,第 1 部分 http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/ 本文通过分析 Java 动态代理的机制和特 ...
随机推荐
- andengine游戏引擎总结进阶篇2
本篇包括瓦片地图,物理系统, 1瓦片地图 超级玛丽,冒险岛,魂斗罗等游戏主场景都有瓦片地图画成,它的作用可见一斑,它可以用tiled Qt软件画成,在辅助篇中讲讲解tiled Qt软件的使用 1)加载 ...
- 当MVC4无法跳转时
//RedirectToAction("Index","首页"); //return View("首页/Index"); //Redirec ...
- Android 开源库
http://www.cnblogs.com/hawkon/p/3593709.html
- CentOS 修改默认语言
查看所有的locale语言 [root@centos6 ~]# locale -a ... ... ... ... xh_ZA xh_ZA.iso88591 xh_ZA.utf8 yi_US yi_U ...
- NSIndexPath的初始化方法
好几次用到了NSIndexPath,但是一直不知道怎么通过 row section这两个参数来初始化 NSIndexPath *index = [NSIndexPath indexPathForR ...
- Thinkphp利用微信多客服消息推送取货二维码消息
首先看微信官方的说法: 当用户主动发消息给公众号的时候(包括发送信息.点击自定义菜单.订阅事件.扫描二维码事件.支付成功事件.用户维权), 微信将会把消息数据推送给开发者,开发者在一段时间内(目前修改 ...
- Mac Please try running this command again as root/Administrator.
mac 终端安装程序,需要权限,出现以下提示语句: Please try running this command again as root/Administrator. 需要执行以下命令即可: s ...
- 使用Notepad++开发python配置笔记
这是我在python学习过程中,收集整理的一些notepadd++环境配置方法. 1.配置制表符 Notepad++ ->"设置"菜单->"首选项" ...
- Java String 和 StringBuffer的区别
1.String类的定义是这样的: public final class String extends Object implements Serializable, Comparable< ...
- android jar 第三方包
工程交叉了,做相互引用 1.单纯的代码jar 不引用res http://terryblog.blog.51cto.com/1764499/564558 1.2.连带源码一起打包出来 http:// ...