在学习spring时,我们最新接触的是AOP/IOC,DI,这里主要总结下spring的aop。
在我们开发的所有应用中,面向对象的思想并不能解决所有问题,而aop(Aspect Oriented Programming )面向切面的编程是对面向对象编程的一种补充。
aop解决问题情境:
人员在访问系统时,我们通常会对访问者的操作(增删改)进行记录,而一个系统最少需要200个类来支持,每个类中大约有8个方法,也就有1600个方法,而如果每个方法都需要有通知来记录用户的操作行为,这对程序开发者无疑是个巨大的工作量,但spring的aop正好解决了这类问题。
一、aop的通知来下
1.前置通知(方法开始运行前通知)
2.环绕通知(前置通知后方法开始前)
3.最终通知(正在运行的程序就快要结束的时候,且方法中没有异常进行通知——方法结束前)
4.方法跑出异常通知(方法中存在异常时进行通知)
5.后置通知(方法结束后通知)
二、aop代理方式
1.静态代理(缺点:不智能)
有多少个类需要代理,就需要写多少个类的proxy类,跟在原类上编写代码一样麻烦,但这确实是代理机制的一种体现。
2.动态代理
采用xml的配置方式直接进行插拔式编程,方便快捷。
execution中表达式:
(1)第一个*表示方法的返回类型为任意类型,如果没有则返回void
(2)第一次出现 .. 表示包下任意层级的类均可匹配
(3)括号之前的*表示方法
(4)括号中的 .. 表示匹配任意类型的参数或没有参数