笔者第一次接触框架,之前粗略学了一些struts2和hibernate(学的不好以后还会重新看),一直认为spring是目前最主流的框架,希望通过摘取所有其他大牛的讲解,精通spring。因为是初学,好多不理解的知识不会记载进来,只学目前能学懂的。
AOP核心概念
1、横切关注点
对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点
2、切面(aspect)
类是对物体特征的抽象,切面就是对横切关注点的抽象
3、连接点(joinpoint)
被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器
4、切入点(pointcut)
对连接点进行拦截的定义
5、通知(advice)
所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类
6、目标对象
代理的目标对象
7、织入(weave)
将切面应用到目标对象并导致代理对象创建的过程
8、引入(introduction)
在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段
笔者理解:把想要加强的方法(或异常)拦截,在执行其进行前后要加强的方法。
下面我们来写一个aop的入门练习!(虽然很简单,但是写出来也很有成就感呢)
在写之前要了解一些知识:
1.spring config:
我们需要加入新的schema文件
下面这段为spring config文件模板:(文件命名为ex_aop.xml)
2.需要导入jar包:
(1).aopalliance.jar
(2).aspectjweaver.jar(自定义通知类包)
下面开始写第一个小例子!
首先定义一个接口HelloWorld
定义两个类实现它
定义一个aop拦截器:
编写ex_aop.xml
对于刚刚学习spring的小白们(就是我自己,心塞QAQ),还要知道expression的使用:
例: execution (* com.sample.service..*. *(..))
整个表达式可以分为五个部分:
1、execution()::表达式主体。
2、第一个*号:表示返回类型, *号表示所有的类型。
3、包名:表示需要拦截的包名,后面的两个句点表示当前包和当前包的所有子包,com.sample.service包、子孙包下所有类的方法。
4、第二个*号:表示类名,*号表示所有的类。
5、*(..):最后这个星号表示方法名,*号表示所有的方法,后面括弧里面表示方法的参数,两个句点表示任何参数
注意:这个地方写错文件不会报错,但运行会报错!
接下来我们就可以进行测试啦!