dedecms织梦内容管理系统    
首页 | java | C/C++ | PHP | 操作系统 | ajax | 脚本编程 | 安全技术 | 本站下载页 | 专题 | QQ群 | 测试中心 | 会员中心 | 积分规则
  当前位置:主页>java>文章内容
java 代理 AOP
来源:http://blackanger.blog.51cto.com/140924/22406 作者:blackanger
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://blackanger.blog.51cto.com/140924/22406
AOP(Aspect Oriented Programing)面向切面编程. 支持AOP的框架(Framework)有Spring,JAC,Jboss AOP等.AOP的应用范围有日志记录,性能统计,安全控制,事务处理等方面.它的主要意图就是将日志记录,性能统计,安全控制等等代码从商业逻辑代码中清楚的划分出来.通过这些行为的分离,我们希望可以将它独立的配置到商业方法中去,而要改变这种行为也不影响到商业逻辑代码.
java语言本身自带有动态代理功能,可以实现AOP.
例子:
public interface Business{
 public void processBusiness(); //商业过程接口
}
//实现该接口的类,代表了代理模式中"真实角色"的类
public class BusinessObject implements Business {

 private Logger log = Logger.getLogger(this.getClass().getName());
 public void processBusiness(){
  //business processing
  System.out.println(“here is business logic”);
 }
}

//代理角色的类
public class ProxyBusiness implements Business{
        private Logger log = Logger.getLogger(this.getClass().getName());
       BusinessObject    busiObj=new  BusinessObject();
       public void processBusiness(){
              log.info("method stats... ");
              busiObj.processBusiness();
             log.info("method ends... ");
        }
}
通过实现java.lang.reflect.InvocationHandler接口提供一个执行处理器,然后通过java.lang.reflect.Proxy得到一个代理对象,通过这个代理对象来执行商业方法,在商业方法被调用的同时,执行处理器会被自动调用.
我们所要做的仅仅是提供一个处理器.
import  java.lang.reflect.InvocationHandler;
import  java.lang.reflect.Method;
import  java.util.logging.Logger;
public class LogHandler implements InvocationHandler {

 private Logger log = Logger.getLogger(this.getClass().getName());
  private Object delegate;   //用于表示被代理的类
  public LogHandler(Object delegate){
   this.delegate = delegate;
  }

 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
  Object obj = null;
  try {
   log.info("method stats..." + method);
   obj = method.invoke(delegate,args);
   log.info("method ends..." + method);
  } catch (Exception e){
   log.info("Exception happends...");
   //excetpion handling.
  }
  return obj;
 }

 
}
客户端调用商业方法的代码如下:

Business businessImp = new BusinessObject();

InvocationHandler handler = new LogHandler(businessImp);

Business proxy = (Business) Proxy.newProxyInstance(
 businessImp.getClass().getClassLoader(),
 businessImp.getClass().getInterfaces(),
 handler);

proxy.processBusiness();

程序输出如下:

INFO: method stats...
here is business logic
INFO: method ends...
本文出自 “引路人” 博客,请务必保留此出处http://blackanger.blog.51cto.com/140924/22406

上一篇:一个简单的木马原型基础代码   下一篇:linux下FTP的搭建及优化
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论
  热点文章
·java自学路线图
·JSP入门实例教程
·JUnit单元测试(2)
·JUnit单元测试(1)
·什么是Servlet
·用AJAX+J2EE实现网上会议室系统
·浅谈在Java语言中究竟是传值还是
·Java 5.0 多线程编程实践
·Java的文件 读和写
·构造器内部的多态方法的行为
·JSP常用内置对象使用说明
·对于JAVA基础测试中常见的异常问
  相关文章
·struts2新特性预览
·JSP入门实例教程
·JSP入门实例教程例子的使用方法
·讲述java语言中内部类的研究
·JSP入门实例教程1-什么是jsp?为
·JSP入门实例教程2(1)-jsp与tomca
·JSP入门实例教程2(2)-jsp和servl
·JSP入门实例教程3-jsp基本语法
·JSP入门实例教程4-jsp内置对象
·JSP入门实例教程5-简单的动作标
·JSP入门实例教程6-jsp自定义标签
·JSP入门实例教程7-JSTL+EL语言
  相关信息
copy right @ 百家拳软件项目研究室 2007 辽ICP备07011763