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. 06-UIKit(tableView数据模型)

    目录: 一.UIPageControl 二.table view数据模型 三.反向传值给TableView并更新 回到顶部 一.UIPageControl在页面下显示点 1 重要属性 .numberO ...

  2. SuperSocket源码解析之开篇

    一 简介 官方介绍:SuperSocket 是一个轻量级, 跨平台而且可扩展的 .Net/Mono Socket 服务器程序框架.你无须了解如何使用 Socket, 如何维护 Socket 连接和 S ...

  3. ios网络学习------1get post异步请求

    网络请求的步骤: get请求: #pragma mark - 这是私有方法,尽量不要再方法中直接使用属性,由于一般来说属性都是和界面关联的,我们能够通过參数的方式来使用属性 #pragma mark ...

  4. traceroute工作原理

      traceroute, 也就是 trace route,跟踪路由.这个程序最早是Van Jacobson实现的.源代码在网上能够找到,只是我还没有去找.基本的原理是IP路由过程中对数据包TTL(T ...

  5. [置顶] Guava学习之Lists

    Lists类主要提供了对List类的子类构造以及操作的静态方法.在Lists类中支持构造ArrayList.LinkedList以及newCopyOnWriteArrayList对象的方法.其中提供了 ...

  6. PS大头照的背景

    给同事ps一个大头照,只是修改一下背景颜色,以前没有做过,这次算是小练习了一把,与大家分享一下.修改大头照背景重要的是如何选中背景的区域,如果用魔棒选择的话,头与背景的边处理的不好,说说我的处理方法吧 ...

  7. sql:oracle, CURSOR

    CursorsYou use a cursor to fetch rows returned by a query. You retrieve the rows into the cursor usi ...

  8. 类虚函数表原理实现分析(当我们将虚表地址[n]中的函数替换,那么虚函数的实现就由我们来控制了)

    原理分析 当调用一个虚函数时, 编译器生成的代码会调用 虚表地址[0](param1, param2)这样的函数. 已经不是在调用函数名了. 当我们将虚表地址[n]中的函数实现改为另外的函数, 虚函数 ...

  9. Mac+IPAD上使用wireshark抓包

    首先先下载wireshark和Xquartz wireshark地址: http://www.wireshark.org/download.html Xquartz 地址:http://xquartz ...

  10. 设计模式六大原则(2):里氏替换原则(Liskov Substitution Principle)

    肯定有不少人跟我刚看到这项原则的时候一样,对这个原则的名字充满疑惑.事实上原因就是这项原则最早是在1988年,由麻省理工学院的一位姓里的女士(Barbara Liskov)提出来的. 定义1:假设对每 ...