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 动态代理的机制和特 ...
随机推荐
- The Tips of Success(成功的建议)
1.Do one thing at a time,and do well. 2.Never forget to say "thanks". 3,Keep on going.Neve ...
- POJ2528线段树基础
開始就直接用延迟标记搞了下.最后发现内存肯定会爆了.数据太大了. 问了瓜神,原来应该用离散化来做这题,详细见凝视 #include <cstdio> #include <cstrin ...
- 做ie8css样式时浏览器默认杂项模式遇到的一个小坑
1 进行ie浏览器的样式兼容的时候,首先要确保打开浏览器浏览网页的时候的文本模式要为当前浏览器的"标准模式",注意<!DOCTYPE html>不缺失不错误,以免浏览器 ...
- 20160115--Hibernate
package com.hanqi.dao; import static org.junit.Assert.*; import java.util.*; import org.hibernate.se ...
- js获取当前url参数的两方式
方法一:正则分析法function getQueryString(name) { var reg = new RegExp("(^|&)" + name + &quo ...
- [转载]给10万pv的WordPress选择最便宜高可用的硬件以及WordPress高并发支持
这些命令很长,但是希望可以让你很容易按照步骤创建一个全新的Linux服务器,使用Varnish, Nginx, W3 Total Cache, and WordPress来搭建一个WordPress博 ...
- jQuery简单前端表单验证
<!DOCTYPE html> <html> <head> <title>表单验证</title> <script src=" ...
- PHP利用递归法获取多级类别的树状数组
数据结构:category(id, pid, name),对应:信息ID,父项ID,类别名 测试数据: $aryCate = array( array('id' => 1, 'pid' => ...
- Android XListView实现原理讲解及分析
XListview是一个非常受欢迎的下拉刷新控件,但是已经停止维护了.之前写过一篇XListview的使用介绍,用起来非常简单,这两天放假无聊,研究了下XListview的实现原理,学到了很多,今天分 ...
- Ubuntu下获取Nexus7的Root权限
一.准备 下载获取Root权限的工具包. 下载地址: http://downloadandroidrom.com/file/Nexus7/rooting/Nexus7Root.zip 二.解锁 Ubu ...