微信号:javajidi_com

介绍:专注Java与Web技术的研究;分享有价值的技术;经验;关注程序员的发展.

AOP切面的理解

2015-04-17 16:51 Java技术

编程语言最终极的目标就是能以更自然、更灵活的方式模拟世界,从原始机器语言到过程语言再到面向对象的语言,编程语言一步步地用更自然、更灵活的方式描述软件。AOP是软件开发思想发展到一定阶段的产物,但AOP的出现并不是要完全替代OOP,而仪是作为OOP的有益补充。虽然AOP作为一项编程技术已经有多年的历史,但一直长时间停留在学术领域,直到近几年,AOP才作为一项真正的实用技术在应用领域开疆扩土。需要指出的是AOP的应用场合是受限的,它一般只适合于那些具有横切逻辑的应用场合:如性能监测、访问控制、事务管理。不过,这丝毫不影响AOP作为一种新的软件开发思想在软件开发领域所占有的地位。
AOP是Aspect Oriented Programing的简称,最初被译为“面向方面编程”,这个翻译向来为人所诟病,但足由于先入为主的效应,受众广泛,所以这个翻译依然被很多人使用,但我们更倾向于用“面向切面编程”的译法,因为它更加达意。
按照软件重构思想的理念,如果多个类中出现相同的代码,应该考虑定义一个共同的抽象类,将这些相同的代码提取到抽象类中。通过引入父类消除多个类中重复代码的方式在大多情况下是可行的,但世界并非永远这样简单,比如下面论坛管理业务类的代码:

package com;
public class ForumService{
private TransactionManager transManager;
private PerformanceMonitor pmonitor;
private TopicDao topicDao;
private ForumDao forumDao;
public void removeTopic(int topicld) {
pmonitor.start();
transManager.beglnTransactlon();
topicDao.removeTopic(topicld);
transManager.commit();
pmonitor.end();
}
public void createForum(Forum forum) {
pmonitor.start();
transManageribeglnTransactlon();
forumDao.create(forum);
transManager.commit();
}

代码中的事务控制,监控就是我们所说的横切面,它泛指一切重复性的环绕在业务周围的非业务操作。对应论坛管理来说,真正的业务只是那些对帖子的管理等操作,就是上述代码中加粗的部分。而数据库事务只是完成这些操作当中的技术层面的保障,与业务无关,但它却与业务紧紧相连。我们无法通过抽象父类的方式消除以上所示的重复性横切代码,因为这些横切逻辑依附在业务类方法的流程中,它们不能转移到其他地方去。
AOP独辟蹊径通过横向抽取机制为这类无法通过纵向继承体系进行抽象的重复性代码提供了解决方案。将这些重复性的横切逻辑独立出来是很容易的,但如何将这些独立的逻辑融合到业务逻辑中完成和原来一样的业务操作,这才是事情的关键,也正是AOP要
解决的主要问题。

 
Java技术 更多文章 准备进入码农行业?你准备好了吗 Java是怎样运行的,你敢说真的知道? Java:怎样理解byte的最大值是2^7-1 交换思想在程序设计中的应用 Java:线程初识
猜您喜欢 推荐:乔布斯:遗失的访谈 Apple Watch会不会是下一个Google Glass Android编译及Dex过程源码分析 Python 开发——一图解千愁 Folly源码分析系列(一) — ThreadLocalPtr