用 Java 动态代理实现 AOP
目前整个开发社区对 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 中。
评论0