1. 前记
终于把 Spring IOC 系列搞完了,还是有所获
我写这些文章是因为恐惧,没有工作的恐惧,想入行java,却又迟迟没动手
很多时候,我认为我所做的一些所谓的「努力」只是流于表面,安慰自己罢了,比如买java课,比如看书
但怎么才能做到真正有效且高效呢 —-> 现在能给出的答案就是 「向具体实际的目标靠近」
比如我写这系列文章是为了什么 —-> 「找到java好的工作」
和前面一个系列的文章一样,我觉得用看大佬博客,这个方式来完成 —- 田小波- Spring AOP 源码分析系列文章导读
这里再留一坑,等我看完这个系列:
「自问自答」
2. AOP 原理
Aspect Oriented Program
AOP原理: 通过代理对象,运行插入到目标方法前后的方法
3. AOP术语
通过一个例子来简单表述吧
参考 什么是面向切面编程AOP? - 夏昊的回答 - 知乎 https://www.zhihu.com/question/24863332/answer/863736101
1
2
3
4
5
6
7
8
9
10
11
12
@Repository
public class UserDao {
public void addUser(){
System.out.println("添加用户");
}
public void updateUser(){
System.out.println("修改用户");
}
public void deleteUser(){
System.out.println("删除用户");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Aspect
public class MyAspectLog {
/**
* 方法执行完后执行的方法
*/
// 「通知(Advice)」after before after-returning after-throwing aound
// 「切入点(Pointcut)」value="execution(* cn.xh.dao.UserDao.addUser(..))"
// 「切面(Aspect)」= 通知 + 切入点
// 「连接点(Join point)」方法,比如上面的`addUser`
@After(value="execution(* cn.xh.dao.UserDao.addUser(..))")
public void log(){
System.out.println("记录日志");
}
}
在spring配置文件中加入:
<!-- 启动@aspectj的自动代理支持-->
<aop:aspectj-autoproxy />
<!-- 定义aspect类 -->
<bean name="myAspect" class="cn.xh.dao. MyAspectLog "/>
上述注释中
「通知(Advice)」after before after-returning after-throwing aound
「切入点(Pointcut)」value=”execution(* cn.xh.dao.UserDao.addUser(..))”
「切面(Aspect)」= 通知 + 切入点
「连接点(Join point)」方法,比如上面的addUser
除此之外还有
「织入(Weaving)」: 通过动态代理对目标对象方法进行增强的过程
以上就所有术语了,这样更好懂一些
4. 总结
主要了解这几个术语
田小波- Spring AOP 源码分析系列文章导读 他这里比较详细的贴了每个术语所对应的源码,我是看的比较头大,看下来也不容易吸收