• 为什么要使用AOP


    首先,按照软件重构思想的理念,如果多个类中出现相同的代码,应该考虑定义一个共同的抽象类,将这些相同的代码提取到抽象类当中去。比如Horse、Pig、Camel这些对象都有run()、eat()方法,通过引入一个包含这两个方法抽象的Animal父类,Horse、Pig、Camel就可以通过集成Animal复用到run()和eat()方法。通过引入父类消除多个类中的重复代码的方式在大多数情况下是可行的,但世界并非永远这么简单,比如下面所示的景区管理业务类。

    import com.smart.dao.ViewPointDao;
    import com.smart.dao.ViewSpaceDao;
    import com.smart.domain.ViewSpace;
    
    /**
     * 景区管理的服务类
     */
    public class ViewSpaceService {
    
        private TransactionManager transManager;
        private PerformanceMonitor pmonitor;
        private ViewSpaceDao viewSpaceDao;
        private ViewPointDao viewPointDao;
    
        /**
         * 新增一个旅游景区
         *
         * @param viewSpace
         */
        public void addViewSpace(ViewSpace viewSpace) {
            pmonitor.start();
            transManager.beginTransaction();
            viewSpaceDao.addViewSpace(viewSpace);
            transManager.endTransaction();
            pmonitor.end();
        }
    
    
        /**
         * 删除某个景点
         *
         * @param pointId
         */
        public void deleteViewPoint(int pointId) {
            pmonitor.start();
            transManager.beginTransaction();
            viewPointDao.deleteViewPoint(pointId);
            transManager.endTransaction();
            pmonitor.end();
        }
    
    }
    

    其中pmonitor是方法性能监视代码,它在方法调用前启动,在方法调用返回前结束,并在内部记录性能监视的结果信息。
    其中transManager的代码是事务开始和事务提交的代码,我们发现我们的业务代码淹没在重复化非业务性的代码之中,性能监视和事务管理这些非业务性代码葛藤缠树搬包围着业务性代码。

    此时我们就不能通过抽象父类的方式消除以上的重复性代码,因为这些逻辑依附在业务类方法的流程中,它们不能够转移到其他地方去。于是产生了AOP这种思想。

  • 相关阅读:
    EMVTag系列15《选择应用响应数据》
    EMVTag系列14《支付环境响应数据》
    EMVTag系列13《脱机PIN》
    EMVTag系列9《卡片管理数据》
    EMVTag系列7《静态签名数据》
    EMVTag系列6《IAC 发卡行行为代码》
    EMVTag系列2《磁条等效数据》
    code1169 传纸条
    关于 变量越界
    code1039 数的划分
  • 原文地址:https://www.cnblogs.com/samwang88/p/e5223d0c7bbb50a53cc92c1de14d18b0.html
Copyright © 2020-2023  润新知