Jdk动态代理

1.动态代理使用的情况:需要在多个方法上加上相同的逻辑的时候,需要用到动态代理。
  原因:在多个方法上写相同的逻辑,第一费事,第二在不用的时候维护麻烦 使用动态代理需要用到两个类:分别为Proxy,InvocationHandler,用InvocationHandel来实现JDK中动态代理的接口,Proxy来生成对应的类的代理类。 代码来说明
  首先创建一个类来实现InvocationHandel
  
package cn.csdn.service; import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method; //动态代理实现
public class LogInterceptor implements InvocationHandler {
// 被代理对象
private Object target; public Object getTarget() {
return target;
}   // 通过往里面设置值来确定被代理的对象
public void setTarget(Object target) {
this.target = target;
} public void beforeMethod() {
System.out.println("拦截的功能");
} @Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
beforeMethod();
// 调用被代理的对象 target是传过来的那个接口 args是接口所对应的类
method.invoke(target, args);
return null;
}
} 然后再创建代理类对象
@Test
public void test() {
//被代理对象 把这个接口对应的方法加上逻辑 是它要进行代理
UserDao userDao = new UserDaoImpl(); //实现了InvocationHander的接口的类
LogInterceptor logInterceptor = new LogInterceptor();
logInterceptor.setTarget(userDao); //三个参数 (classLoader, 被代理对象都实现类哪些接口,进行代理的类)
UserDao userDaoProxy = (UserDao) Proxy.newProxyInstance(userDao.getClass().getClassLoader(),new Class[]{UserDao.class}, logInterceptor);
userDaoProxy.addUser();
userDaoProxy.delete();
}
注:new Class[]{UserDao.class} 和 UserDao.getClass().getInterfaces()是一样的,前者是数组,肯定定义多个接口,后者是定义一个接口 UserDao和UsreDaoImpl中就是放了两个方法,分别为addUser(),delete() UserDao接口
public interface UserDao {
public void addUser();
public void delete();
} UserDaoImpl类
public class UserDaoImpl implements UserDao {
@Override
public void addUser() {
// TODO Auto-generated method stub
System.out.println("添加啦=======");
}
@Override
public void delete() {
// TODO Auto-generated method stub
System.out.println("删除操作==");
}
} Junit测试的结果为:
拦截的功能
添加啦=======
拦截的功能
删除操作==


我们可以看到  我们在每一个调用的方法钱都加上了想要添加的方法

JDK动态代理简单小程序的更多相关文章

  1. aop学习总结一------使用jdk动态代理简单实现aop功能

    aop学习总结一------使用jdk动态代理实现aop功能 动态代理:不需要为目标对象编写静态代理类,通过第三方或jdk框架动态生成代理对象的字节码 Jdk动态代理(proxy):目标对象必须实现接 ...

  2. JDK动态代理简单使用(2)

    JDK动态代理使用: 使用JDK动态代理步骤: ①创建被代理的接口和类: public interface IA { void f1(String param); } public class A i ...

  3. Java通过JDK动态代理简单的实现一个AOP

    首先说一下,因为自己还没有去研读spring的AOP的源码,只是大致知道其功能,便想着自己先手动实现一个先看看,觉得这样以后研读源码的时候会收获更多! 实现:做一个在添加注解的方法执行之前,可以先执行 ...

  4. JDK动态代理[4]----ProxyGenerator生成代理类的字节码文件解析

    通过前面几篇的分析,我们知道代理类是通过Proxy类的ProxyClassFactory工厂生成的,这个工厂类会去调用ProxyGenerator类的generateProxyClass()方法来生成 ...

  5. java之JDK动态代理

    © 版权声明:本文为博主原创文章,转载请注明出处 JDK动态代理: JDK动态代理就是在程序运行期间,根据java的反射机制自动的帮我们生成相应的代理类 优势: - 1. 业务类只需要关注业务逻辑本身 ...

  6. Java JDK 动态代理实现和代码分析

    JDK 动态代理 内容 一.动态代理解析 1. 代理模式 2. 为什么要使用动态代理 3. JDK 动态代理简单结构图 4. JDK 动态代理实现步骤 5. JDK 动态代理 API 5.1 java ...

  7. JDK动态代理和CGLib动态代理简单演示

    JDK1.3之后,Java提供了动态代理的技术,允许开发者在运行期间创建接口的代理实例. 一.首先我们进行JDK动态代理的演示. 现在我们有一个简单的业务接口Saying,如下: package te ...

  8. 利用JDK动态代理机制实现简单拦截器

    利用JDK动态代理机制实现简单的多层拦截器 首先JDK动态代理是基于接口实现的,所以我们先定义一个接口 public interface Executer { public Object execut ...

  9. JDK动态代理实现简单AOP--转

    JDK 动态代理是 java 反射的一个重要特性.它在某种方面为 java 提供了动态性的特性,给应用带来了无限的空间.大名鼎鼎的 Hessian . Spring AOP 基于动态代理实现.本文将简 ...

随机推荐

  1. 05-IOSCore - 单例模式、KVO

    单例模式 是设计模式之一,使用频率高,让数据或对象在程序的各个地方都能访问,保持唯一 要素: 各个地方都能访问方法 + 静态消息 只要导入类 就能访问 保持唯一 1.在静态消息内限制对象的创建 2.外 ...

  2. 简单的http代理服务器

    简单的http代理服务器 本项目课程是基于 Python 实现的一个简单的 HTTP 代理服务器,要求用户需了解 Python 基础和一定的 HTTP 服务器基础知识.

  3. POJ 3986 Math teacher's homework

    题目 给出\(n,m_1,m_2,...,m_n\),求\(x_1 xor x_2 xor ... xor x_n=k (0 \leq x_i \leq m_i)\)的解的数量.二进制位数小于\(32 ...

  4. C语言数据结构----栈的定义及实现

    本节主要说的是数据结构中的栈的基本定义和实现的方式,其中实现的方式采用的是复用顺序表和单向链表的方式. 一.栈的基本定义 1.栈是一种特殊的线性表,只能从固定的方向进出,而且栈进出的基本原则是:先进栈 ...

  5. Java基础10 接口的继承与抽象类

    链接地址:http://www.cnblogs.com/vamei/archive/2013/03/31/2982240.html 作者:Vamei 出处:http://www.cnblogs.com ...

  6. itextSharp 对pdf的每个页面添加footer/header

    static void SetAllHeaderFooter(string inputPath) { PdfReader reader=new PdfReader(inputPath); PdfSta ...

  7. WM_PAINT消息在窗口重绘的时候产生,那什么时候窗口会重绘(异步工作方式效率高、灵活性强,还有UpdateWindow和RedrawWindow帮忙)

    Q:wm_paint消息在窗口重绘的时候产生,那什么时候窗口会重绘?? A: 严格地说,只有当收到WM_PAINT消息后窗口会重绘 但是引起这个消息的事件有很多, 比如:1.首次创建 2.移动 3.改 ...

  8. log4net使用经验总结

    下面介绍几条我认为比较好的经验,让我们更好的运用log4net 1.web程序时不把log4net的配置文件放在web.config中 原因:一个项目随着需求的变更,配置字节会特别多,不便查阅及维护. ...

  9. Javascript关闭详细说明

    在我的博客:http://blog.csdn.net/u011043843/article/details/26148265中也有对闭包的解释 在javascript中闭包是一个非常不好理解的概念.可 ...

  10. RHEL Server 6.3下MySQL5.5.25a源码安装

    OS:RHEL Server 6.3 MySQL:mysql-5.5.25a.tar.gz 相关依赖包: ncurses-5.9.tar.gz bison-2.5.tar.gz 安装MySQL 一.安 ...