首页 > 学院 > 开发设计 > 正文

Java 面向切面编程(Aspect Oriented Programming,AOP)

2019-11-14 23:20:30
字体:
来源:转载
供稿:网友
java 面向切面编程(aspect Oriented PRogramming,AOP)本文内容
  • 实例
    • 引入
    • 原始方法
    • 装饰者模式
  • JDK 动态代理和 cglib 代理
  • 直接使用 AOP 框架——AspectWerkz

最近跳槽了,新公司使用了 AOP 相关的技术,于是查点资料,复习一下。之前,多少知道点,但没怎么在实际项目中使用过~

下载 demo 实例
引入
package com.cap.aop;
 
public interface ICalculator {
    public double add(double num1, double num2) throws Exception;
 
    public double sub(double num1, double num2) throws Exception;
 
    public double div(double num1, double num2) throws Exception;
 
    public double mul(double num1, double num2) throws Exception;
}
package com.cap.aop;
 
/**
 * 加减乘除
 * */
public class Calculator implements ICalculator {
    @Override
    public double add(double num1, double num2) {
        double result = num1 + num2;
        return result;
    }
 
    @Override
    public double sub(double num1, double num2) {
        double result = num1 - num2;
        return result;
    }
 
    @Override
    public double div(double num1, double num2) {
        double result = num1 / num2;
        return result;
    }
 
    @Override
    public double mul(double num1, double num2) {
        double result = num1 * num2;
        return result;
    }
}

定义 ICalculator 接口和 Calculator 类,并且 Calculator 也继承 ICalculator

若要为这个类添加“日志”功能该如何做?日志在实际项目中很有必要,比如数据库日志,业务日志等等,通过日志就能知道数据库和业务存在的问题,这要比调试程序容易多了,此外还有性能统计,安全控制,事务处理,异常处理等等都是类似问题。

我们最可能想到的是,在类的每个方法内都写日志相关的代码,或是在该类的基类中写,在其子类中继承。

原始方法
package com.cap.aop;
 
/**
 * 加减乘除,原始方式
 * */
public class CalculatorOriginalWay implements ICalculator {
    @Override
    public double add(double num1, double num2) {
        System.out.println("the method [add()]" + "begin with args (" + num1
                + "," + num2 + ")");
 
        double result = num1 + num2;
 
        System.out.println("the method [add()]" + "end with result (" + result
                + ")");
 
        return result;
    }
 
    @Override
    public double sub(double num1, double num2) {
        System.out.println("the method [sub()]" + "begin with args (" + num1
                + "," + num2 + ")");
 
        double result = num1 - num2;
 
        System.out.println("the method [sub()]" + "end with result (" + result
                + ")");
 
        return result;
    }
 
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表