zoukankan      html  css  js  c++  java
  • AOP

          AOP是OOP的延续,是Aspect   Oriented   Programming的缩写,意思是面向切面编程。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。

     

         还是用例子来说明一切,比如现在有一个DomainObjDAO接口以及其实现类DomainObjDAOImpl
    DomainObjDAO.java:
    public interface DomainObjDAO {
    public void save();
    }
    DomainObjDAOImpl:
    public class DomainObjDAOImpl implements DomainObjDAO {
    private Logger logger = Logger.getLogger(this.getClass().getName());
    public void save() {
    System.out.println("saving domain object......");
    }

     

     

        

    动态代理实现AOP

    public class LockHandler implements InvocationHandler {
    private Logger logger = Logger.getLogger(this.getClass().getName()); 
    private Object originalObject;

    public Object bind(Object obj) {
    logger.info("coming here...");
    this.originalObject = obj;
    return Proxy.newProxyInstance(
    obj.getClass().getClassLoader(),
    obj.getClass().getInterfaces(),this);}

    public Object invoke(Object arg0, Method arg1, Object[] arg2) throws Throwable {
    Object result=null;
    if(arg1.getName().startsWith("save")){
    lock();
    result=arg1.invoke(this.originalObject,arg2);
    unlock();
    }
    return result;
    }
    private void lock(){
    logger.info("lock object...");
    }
    private void unlock(){
    logger.info("unlock object...");
    }
    }
    上述代码中并没有出现与具体应用层相关的接口以及类的引用,所以对所有的类都适用。这便解决了用普通Proxy类实现的弊端。但是动态代理要求所代理的类必须是某个接口的实现(这点可以通过obj.getClass().getInterfaces()看出),不过这也符合面向对象的设计思想,如果所代理的类没有实现任何接口,可以通过GCLIB来实现,这里就不再详述。

  • 相关阅读:
    java--堆栈
    git 修改默认编辑器
    java 二维数组的行列长度
    公钥私钥
    手机是如何定位的
    Git和svn的区别
    面试未解之谜
    删除单链表中重复元素
    深入分析事务的隔离级别
    传送
  • 原文地址:https://www.cnblogs.com/a892647300/p/2655824.html
Copyright © 2011-2022 走看看