Java动态-代理实现AOP

时间:2023-07-15 09:33:43 

目前整个开发社区对AOP(Aspect Oriented Programing)推崇备至,也涌现出大量支持AOP的优秀Framework,--Spring, JAC, Jboss AOP 等等。AOP似乎一时之间成了潮流。Java初学者不禁要发出感慨,OOP还没有学通呢,又来AOP。本文不是要在理论上具体阐述何为AOP, 为何要进行AOP . 要详细了解学习AOP可以到它老家http://aosd.net去瞧瞧。这里只是意图通过一个简单的例子向初学者展示一下如何来进行AOP.
为了简单起见,例子没有没有使用任何第三方的AOP Framework, 而是利用Java语言本身自带的 * 功能来实现AOP.
让我们先回到AOP本身,AOP主要应用于日志记录,性能统计,安全控制,事务处理等方面。它的主要意图就要将日志记录,性能统计,安全控制等等代码从商业逻辑代码中清楚的划分出来,我们可以把这些行为一个一个单独看作系统所要解决的问题,就是所谓的面向问题的编程(不知将AOP译作面向问题的编程是否欠妥)。通过对这些行为的分离,我们希望可以将它们独立地配置到商业方法中,而要改变这些行为也不需要影响到商业方法代码。
假设系统由一系列的BusinessObject所完成业务逻辑功能,系统要求在每一次业务逻辑处理时要做日志记录。这里我们略去具体的业务逻辑代码。
public interface BusinessInterface {
public void processBusiness();
}
public class BusinessObject implements BusinessInterface {
private Logger logger = Logger.getLogger(this.getClass().getName());
public void processBusiness(){
try {
logger.info("start to processing...");
//business logic here.
System.out.println(“here is business logic”);
logger.info("end processing...");
} catch (Exception e){
logger.info("exception happends...");
//exception handling
}
}
}
这里处理商业逻辑的代码和日志记录代码混合在一起,这给日后的维护带来一定的困难,并且也会造成大量的代码重复。完全相同的log代码将出现在系统的每一个BusinessObject中。

标签:Ja,av,va,a动,动态,态代,代理,理实,实现,现A,AO,OP,P
0
投稿

猜你喜欢

  • JS与jQ读取xml文件的方法

    2024-04-19 10:13:22
  • 两行 JavaScript 代码

    2010-08-31 14:57:00
  • python的多线程原来可以这样解

    2021-02-22 16:12:18
  • Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)

    2021-07-10 10:35:25
  • Python实现读取txt文件并转换为excel的方法示例

    2023-07-25 15:20:16
  • mysql-connector-java与mysql版本的对应关系说明

    2024-01-19 07:35:36
  • Oracle实现动态SQL的拼装要领

    2024-01-15 07:38:23
  • eWebEditor不支持IE8的解决方法

    2009-11-02 10:59:00
  • Python3.6使用tesseract-ocr的正确方法

    2023-10-24 20:46:28
  • 正确理解python迭代器与生成器

    2022-09-14 22:55:57
  • JS版的date函数(和PHP的date函数一样)

    2023-11-15 02:02:11
  • Golang编程实现删除字符串中出现次数最少字符的方法

    2024-05-25 15:15:56
  • 经典分享MySQL的limit查询优化

    2011-05-05 15:47:00
  • Python PyQt5学习之自定义信号

    2022-01-06 12:03:52
  • Oracle时间日期操作方法小结第1/2页

    2010-11-29 19:40:00
  • js版sliderBar(滑动条)控件

    2008-10-18 15:59:00
  • opencv python统计及绘制直方图的方法

    2021-12-27 21:52:45
  • Node.js系列之连接DB的方法(3)

    2024-05-03 15:55:26
  • python 发送邮件的四种方法汇总

    2022-04-09 05:44:18
  • 原生js实现查找/添加/删除/指定元素的class

    2024-04-18 09:44:46
  • asp之家 网络编程 m.aspxhome.com