AOP 是 Aspect Oriented Programming 的缩写,意思是面对方面编程,一种新兴的编程技术。 AOP 实际是 GoF 设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦, AOP 可以说也是这种目标的一种实现。它可以解决 OOP 和过程化方法不能够很好解决的横切 (crosscut)问题, 如:事务、安全、日志等横切关注。当未来系统变得越来越复杂, 横切关注点就成为一个大问题的时候,AOP 就可以很轻松的解决横切关注点这个问题。 比如有这样一个情景: Java 代码 1. public class AccountManager { 2. private static final sysLogger = SystemLogger.getInstance(); 3. private AuthorizationManager authMgr = new AuthorizationManager(); 4. 5. public void transferFunds(String from, String to, int amount) { 6. sysLogger.log("transfer funds from " + from + " to " + to); 7. if(authMgr.accessAble(from) && authMgr.accessAble(to)) { 8. sysLogger.log("access successfully"); 9. CustomerAccount from = findAccount(from); 10. CustomerAccount to = findAccount(to); 11. from.debit(amount); 12. to.credit(amount); 13. } else { 14. sysLogger.log("access deny"); 15. } 16. sysLogger.log("transfer funds from " + from + " to " + to + " $" + amount + " successfully!"); 17. } 18. } 这个例子虽然是很好的面对对象代码,但是在业务处理逻辑中夹杂这日志处理和权限推断,变得复杂混乱. 在 AOP 中,正交关注点(如安全和日志记录)被识别为系统中的常见横切关注点。说它们是横切, 是因为它们总是切入模块(如包、类和代码文件)的多个单位。也许横切关注点可能不是核心业务逻辑的一部分,但是它们是应用程序的基本部分。 AOP 的实现主要是通过方法的拦截实现.在不使用 AOP 框架的情况下,我们可以通过 JDK 提供的动态代理来实现方法的拦截 注意:使用 JDK 提供的动态代理实现 要求我们的目标对象必须实现接口 IUserBean 接口 Java 代码 1. package .royzhou.aop; 2. 3. public interface IUserBean { 4. 5. public void getUser(); 6. 7. public void addUser(); 8. 9. public void updateUser(); 10. 11. public void deleteUser(); 12. } I...