AOP是Spring的两大核心功能之一。

AOP的概念

AOP的全称是:Aspect Oriented Programing 也就是面向切面编程,它是一种思想,是对面向对象编程(Object Oriented Progeamming,OOP)的补充。
我们首先来了解一下什么是横切关注点和核心关注点,在以往的代码中常常会出现以下情况。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class UserServiceImpl implements UserService {
private static final Logger log = Logger.getLogger(UserServiceImpl.class); 
public boolean addNewUser(User user) {
log.info(“添加用户 ” + user.getUsername());//记录日志
SqlSession sqlSession = null;
boolean flag = false;
//异常处理
try {
sqlSession = MyBatisUtil.createSqlSession();
if (sqlSession.getMapper(UserMapper.class).add(user) > 0)
flag = true;
sqlSession.commit(); //事务控制
} catch (Exception e) {
log.error("添加用户 " + user.getUsername() + "失败", e); //记录日志
sqlSession.rollback(); //事务控制
flag = false;
} finally {
MyBatisUtil.closeSqlSession(sqlSession);
}
return flag;
}
}

可以看到原本只是想处理一个添加用户的业务,为了保证可用性增加了 日志、异常处理、事务控制等。结果导致原本的代码冗余。
那么这些散落在系统各处穿插在业务中的操作也就叫做横切逻辑,也就是切面。则原本要实现的功能就是核心关注点
因此Spring为了解决这个问题使用aop思想将复杂的需求分解出不同的方面,然后在系统中的公共功能中集中解决。

AOP的实现原理

AOP的开发步骤

AOP关键词解释