aop到底是什么东西呢?和oop有什么关系呢,可以取代oop吗?
oop是面向对象编程,你可以简单的认为:世界万物都是一个对象,你编写的代码只不过是对这些对象属性以及它动作的描述。
java的思想,其中一个特性是继承。就是把子类相同的动作或者属性抽出到父类,子类可以沿用父类的属性或者方法,也可以重写父类的方法。这样可以避免代码重复。
这里你可以思考下重写和重载的区别,温故而知新。(重载只一个类来说的,重写是对父类和子类来说的)
但是仅仅用继承有时候还达不到要求。
比如下面的例子,只是一个示例而已。
UserService
package spring3.aop.aop1; public class UserService { private Transaction transaction; public void delUser() { transaction.openTran(); System.out.println("UserService delUser!"); transaction.commitTran(); } public void updUser() { transaction.openTran(); System.out.println("UserService updUser!"); transaction.commitTran(); } }
上面代码中,删除或者更新用户时,都要打开和关闭事务,首先关于事务的代码抽出到了一个Transaction类中了,这样做已经优化了代码结构。
Transaction
package spring3.aop.aop1; public class Transaction { public void openTran() { System.out.println(" Open Transaction! "); } public void commitTran() { System.out.println(" Commit Transaction! "); } }
但是,UserService中还是有代码重复,主要的是,这部分代码并不是UserService需要关心的事,那我们怎么办呢。这个时候就需要aop了。
这就是为什么只用oop不行,需要用aop来辅助。
并且aop和oop并不是谁能取代谁的关系,而是它们需要相互协作,相辅相成的来优化我们的代码。
(未完待续...)