Java动态代理和AOP应用示例

 更新时间:2019年07月15日 09:32:27   转载 作者:cakincqm  
这篇文章主要介绍了Java动态代理和AOP应用,结合实例形式分析了java动态代理在AOP面向切面编程中的相关操作技巧与使用注意事项,需要的朋友可以参考下

本文实例讲述了Java动态代理和AOP应用。分享给大家供大家参考,具体如下:

一 点睛

动态代理在AOP(Aspect Orient Program,即面向切面编程)里被称为AOP代理,AOP代理可代替目标对象,AOP代理包含了目标对象的全部方法。但AOP代理中的方法与目标对象的方法存在差异:AOP代理里的方法可以在执行目标方法之前、之后插入一些通用处理。

二 代码

Dog.java

public interface Dog
{
  // info方法声明
  void info();
  // run方法声明
  void run();
}

GunDog.java

public class GunDog implements Dog
{
  // 实现info()方法,仅仅打印一个字符串
  public void info()
  {
    System.out.println("我是一只猎狗");
  }
  // 实现run()方法,仅仅打印一个字符串
  public void run()
  {
    System.out.println("我奔跑迅速");
  }
}

DogUtil.java

public class DogUtil
{
  // 第一个拦截器方法
  public void method1()
  {
    System.out.println("=====模拟第一个通用方法=====");
  }
  // 第二个拦截器方法
  public void method2()
  {
    System.out.println("=====模拟通用方法二=====");
  }
}

MyInvokationHandler.java

import java.lang.reflect.*;
public class MyInvokationHandler implements InvocationHandler
{
  // 需要被代理的对象
  private Object target;
  public void setTarget(Object target)
  {
    this.target = target;
  }
  // 执行动态代理对象的所有方法时,都会被替换成执行如下的invoke方法
  public Object invoke(Object proxy, Method method, Object[] args)
    throws Exception
  {
    DogUtil du = new DogUtil();
    // 执行DogUtil对象中的method1。
    du.method1();
    // 以target作为主调来执行method方法
    Object result = method.invoke(target , args);
    // 执行DogUtil对象中的method2。
    du.method2();
    return result;
  }
}

MyProxyFactory.java

import java.lang.reflect.*;
public class MyProxyFactory
{
  // 为指定target生成动态代理对象
  public static Object getProxy(Object target)
    throws Exception
    {
    // 创建一个MyInvokationHandler对象
    MyInvokationHandler handler =
    new MyInvokationHandler();
    // 为MyInvokationHandler设置target对象
    handler.setTarget(target);
    // 创建、并返回一个动态代理
    return Proxy.newProxyInstance(target.getClass().getClassLoader()
      , target.getClass().getInterfaces() , handler);
  }
}

Test.java

public class Test
{
  public static void main(String[] args)
    throws Exception
  {
    // 创建一个原始的GunDog对象,作为target
    Dog target = new GunDog();
    // 以指定的target来创建动态代理
    Dog dog = (Dog)MyProxyFactory.getProxy(target);
    dog.info();
    dog.run();
  }
}

三 运行

E:\Java\疯狂java讲义\codes\18\18.5\DynaProxy>java Test
=====模拟第一个通用方法=====
我是一只猎狗
=====模拟通用方法二=====
=====模拟第一个通用方法=====
我奔跑迅速
=====模拟通用方法二=====

更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • spring boot补习系列之几种scope详解

    spring boot补习系列之几种scope详解

    这篇文章主要给大家介绍了关于spring boot补习系列之几种scope的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用spring boot具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • 详解spring+springmvc+mybatis整合注解

    详解spring+springmvc+mybatis整合注解

    本篇文章主要介绍了详解spring+springmvc+mybatis整合注解,详细的介绍了ssm框架的使用,具有一定的参考价值,有兴趣的可以了解一下
    2017-04-04
  • 详解Java设计模式之备忘录模式的使用

    详解Java设计模式之备忘录模式的使用

    这篇文章主要介绍了Java设计模式之备忘录模式的使用,备忘录模式中的发起者和管需要的朋友可以参考下
    2016-02-02
  • java中注解机制及其原理的详解

    java中注解机制及其原理的详解

    这篇文章主要介绍了java中注解机制及其原理的详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下
    2017-10-10
  • Maven项目打包成war包部署到Tomcat的方法

    Maven项目打包成war包部署到Tomcat的方法

    这篇文章主要介绍了Maven项目打包成war包部署到Tomcat的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • visual studio 2019安装配置可编写c/c++语言的IDE环境

    visual studio 2019安装配置可编写c/c++语言的IDE环境

    这篇文章主要介绍了visual studio 2019安装配置可编写c/c++语言的IDE环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • java把字符串写入文件里的简单方法分享

    java把字符串写入文件里的简单方法分享

    这篇文章主要介绍了java把字符串写入到文件里的简单方法,这是跟一个外国朋友学的代码,需要的朋友可以参考下
    2014-03-03
  • JAVA字符串格式化-String.format()的使用

    JAVA字符串格式化-String.format()的使用

    本篇文章主要介绍了JAVA字符串格式化-String.format()的使用,具有一定的参考价值,有需要的可以了解一下。
    2016-11-11
  • Java实现打飞机小游戏(附完整源码)

    Java实现打飞机小游戏(附完整源码)

    这篇文章主要介绍了Java实现打飞机小游戏(附完整源码),这里整理了详细的代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • java基于Socket做一个简单下载器

    java基于Socket做一个简单下载器

    这篇文章主要为大家详细介绍了java如何基于Socket制作一个简单下载器,感兴趣的小伙伴们可以参考一下
    2016-08-08

最新评论