`
cheer_nice
  • 浏览: 103182 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

动态代理与AOP

    博客分类:
  • j2se
阅读更多

 转载 原文链接:http://soft.chinabyte.com/database/283/11335783.shtml

 

 

在目前的Java开发包中包含了对动态代理的支持,但是其实现只支持对接口的的实现。

  其实现主要通过是java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口。

  Proxy类主要用来获取动态代理对象,InvocationHandler接口用来约束调用者实现,如下,HelloWorld接口定义的业务方法,HelloWorldImpl是HelloWorld接口的实现,HelloWorldHandler是 InvocationHandler接口实现。代码如下:

  业务接口:

  public interface HelloWorld {

  void sayHelloWorld() ;

  }

  业务接口实现:

  public class HelloWorldImpl implements HelloWorld {

  public void sayHelloWorld() {

  System.out.println("Hello World!");

  }

  }

  InvocationHandler实现,需要在接口方法调用前后加入一部份处理工作,这里仅仅在方法调用前后向后台输出两句字符串,其代码如下:

  import java.lang.reflect.InvocationHandler;

  import java.lang.reflect.Method;

  public class HelloWorldHandler implements InvocationHandler {

  //要代理的原始对象

  private Object objOriginal;

  /**

  * 构造函数。

  * @param obj 要代理的原始对象。

  */

  public HelloWorldHandler(Object obj) {

  this.objOriginal = obj ;

  }

  public Object invoke(Object proxy, Method method, Object[] args)

  throws Throwable {

  Object result ;

  //方法调用之前

  doBefore();

  //调用原始对象的方法

  result = method.invoke(this.objOriginal ,args);

  //方法调用之后

  doAfter();

  return result ;

  }

  private void doBefore() {

  System.out.println("before method invoke!");

  }

  private void doAfter() {

  System.out.println("after method invoke!");

  }

  }

  测试代码:

  import java.lang.reflect.InvocationHandler;

  import java.lang.reflect.Proxy;

  public class Test {

  public static void main(String[] args) {

  HelloWorld hw = new HelloWorldImpl();

  InvocationHandler handler = new HelloWorldHandler(hw);

  HelloWorld proxy = (HelloWorld) Proxy.newProxyInstance(

  hw.getClass().getClassLoader(),

  hw.getClass().getInterfaces(),

  handler);

  proxy.sayHelloWorld();

  }

  }

  首先获取一个业务接口的实现对象;

  获取一个InvocationHandler实现,此处是HelloWorldHandler对象;

  创建动态代理对象;

  通过动态代理对象调用sayHelloWorld()方法,此时会在原始对象HelloWorldImpl. sayHelloWorld()方法前后输出两句字符串。

  运行测试类输出如下:

  before method invoke!

  Hello World!

  after method invoke!

  此处Test类中的方法调用代码比较多,在我们的实际应用中可以通过配置文件来来简化客户端的调用实现。另外也可以通过动态代理来实现简单的AOP。

 

 

记录 在spring中 若一个类实现了某借口如UserDAO 则就用JDK Proxy InvocationHandler来实现代理

若这个类没有实现某以接口 则用cglib来直接操纵2进制码来实现动态代理

 

https://www.ibm.com/developerworks/cn/java/j-lo-proxy1/ 这个是一个介绍proxy内部更多机制的文章 小难

分享到:
评论

相关推荐

    动态代理和AOP详解

    动态代理和AOP是Java和Spring框架中的重要概念,它们为开发者提供了强大的代码复用和模块化设计的能力。本文将深入解析这两个主题,并结合提供的源码进行详细讲解。 首先,让我们了解一下动态代理。在Java中,动态...

    spring之AOP(动态代理)

    在Spring中,AOP主要通过两种动态代理技术实现:JDK动态代理和CGLIB动态代理。 首先,让我们详细了解一下JDK动态代理。JDK动态代理基于Java的接口实现,它适用于目标对象实现了至少一个接口的情况。在运行时,JDK...

    用Java动态代理实现AOP

    Java动态代理实现AOP Java动态代理是实现Aspect Oriented Programming(AOP)的重要手段。在Java中,动态代理可以通过java.lang.reflect InvocationHandler接口和java.lang.reflect.Proxy类来实现。AOP的主要思想...

    反射实现 AOP 动态代理模式(Spring AOP 的实现原理)

    动态代理是实现AOP的一种常用技术,它允许在运行时创建代理对象,拦截对真实对象的调用,并在调用前后添加额外的行为。 在Java开发中,反射机制是实现动态代理的关键技术之一。反射提供了在运行时访问和操作类的...

    动态代理实现AOP机制

    动态代理是实现AOP的一种常见手段,尤其在Java中应用广泛。 动态代理主要分为JDK动态代理和CGLIB动态代理两种方式: 1. **JDK动态代理**: JDK动态代理基于接口实现,它通过`java.lang.reflect.Proxy`类和`java....

    JDK动态代理 spring aop 的原理

    Spring AOP(面向切面编程)则是一种流行的应用框架,它利用动态代理来实现对业务代码的切面增强,如日志、事务管理等。现在让我们深入探讨JDK动态代理和Spring AOP的原理。 首先,JDK动态代理基于Java的反射机制,...

    java 动态代理实现AOP

    ### Java动态代理实现AOP详解 #### 一、引言 随着软件开发复杂度的提升,传统的面向对象编程(OOP)已经难以满足现代软件工程的需求。为了更好地管理跨切面的关注点,如日志记录、性能监控、安全控制等,面向切面...

    动态代理(AOP)简单例子

    动态代理(Aspect-Oriented Programming,AOP)是面向切面编程的一种编程范式,它主要用来解决传统面向对象编程中难以处理的横切关注点问题。这些关注点,如日志、事务管理、安全检查等,往往分散在程序的各个角落,...

    AOP动态代理(反射机制)

    动态代理是实现AOP的一种常见方式,特别是在Java中。 在Java中,动态代理主要涉及到两个类:java.lang.reflect.Proxy和java.lang.reflect.InvocationHandler。Proxy类用于创建一个实现了特定接口的代理对象,而...

    java动态代理实例aop

    Java动态代理是Java编程中一个非常重要的特性,它在实际开发中被广泛应用于面向切面编程(Aspect-Oriented Programming,简称AOP)领域。AOP是一种编程范式,旨在提高代码的可重用性和模块化,通过将关注点分离,...

    java分页 动态代理 aop实现

    这些代码可能涉及到如何创建分页对象,如何与数据库交互获取分页数据,以及如何在AOP中使用动态代理进行拦截和处理。 总的来说,Java分页、动态代理和AOP是Java开发中的关键技术,它们能帮助我们构建出更加高效、可...

    动态代理实现aop

    ### 动态代理实现AOP #### 概述 面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,旨在通过将横切关注点与业务逻辑分离来提高系统的模块化程度。本篇文章主要介绍了如何利用Java动态代理技术...

    动态代理实现AOP思想

    动态代理在许多场景下都有应用,特别是在实现面向切面编程(Aspect-Oriented Programming,简称AOP)时。AOP的核心思想是将关注点分离,将业务逻辑与横切关注点(如日志、事务管理等)解耦。在Java中,我们可以利用...

    AOP之JDK动态代理和CGLib动态代理

    Spring框架是AOP实现的一个典范,它提供了两种主要的动态代理方式:JDK动态代理和CGLib动态代理。 **JDK动态代理**: JDK动态代理基于Java的反射API实现,适用于接口代理。当目标对象实现了至少一个接口时,Spring...

    基于Java动态代理的AOP实现.zip

    本项目旨在通过Java的动态代理技术实现面向切面编程(AOP),涵盖了静态代理、JDK动态代理、CGLIB动态代理、AspectJ以及基于instrumentation的动态代理等多种实现方式。通过这些实现方式,可以在不修改原有代码的...

    Java动态代理(Spring Aop原理)

    在Spring框架中,AOP(面向切面编程)就是基于Java动态代理来完成的,用于实现横切关注点,如日志、事务管理等。这篇博客的文章链接虽然没有给出具体内容,但我们可以根据Java动态代理和Spring AOP的基本概念来深入...

Global site tag (gtag.js) - Google Analytics