AOP概述
AOP 专业名词解释
AOP概述
什么是AOP, 面向切面编程
AOP为Aspect Oriented Programming的缩写, 意为:面向切面编程, 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. AOP是OOP的延续, 是函数式编程的一种衍生范型. 利用AOP可以对业务逻辑的各个部分进行隔离, 从而使得业务逻辑各部分之间的耦合度降低, 提高程序的可重用性, 同时提高了开发的效率. -解耦
传统开发模型: 纵向的编程
面向切面编程: 纵横配合的编程
AOP的作用及优势
作用:
在程序运行期间,不修改任何相关源码对已有方法进行增强。
优势:
减少重复代码、提高开发效率、维护方便
AOP的实现方式
使用动态代理模式来实现
案例中问题
模拟事务管理器
public class TransactionManagerHandler {
public void begin() {
System.out.println("开启事务");
}
public void commit() {
System.out.println("提交事务");
}
public void rollback() {
System.out.println("回滚事务");
}
public void close() {
System.out.println("关闭session");
}
}
Service层代码
public class UserServiceImpl implements UserService {
// 引入事务管理器
private TransactionManagerHandler txManager = new TransactionManagerHandler();
@Override
public void insert(String username) {
try {
txManager.begin();
System.out.println("调用dao层插入方法");
txManager.commit();
} catch (Exception e) {
txManager.rollback();
} finally {
txManager.close();
}
}
@Override
public void update(String username) {
try {
txManager.begin();
System.out.println("调用dao层修改方法");
txManager.commit();
} catch (Exception e) {
txManager.rollback();
} finally {
txManager.close();
}
}
}
存在的问题
我们的事务控制的代码是重复性的。这还只是一个业务类,如果有多个业务了,每个业务类中都会有这些重复性的代码。是不是重复代码太多了?
思考:我们有什么办法解决这个问题吗?
解决上述问题的方案
- JDK的动态代理 - Java官方
- CGLIB动态代理 -第三方组织开源
- Spring的AOP技术(底层就是JDK动态代理和CGLIB代理技术)
什么是动态代理技术?
Java中的动态代理,就是使用者使用的不是真实的对象,而是使用的一个代理对象,而这个代理对象中包含的就是真实的对象,代理对象就是不改变原有对象的功能方法的基础之上封装新的功能