SpringMVC学习笔记(三) 切面详解
来源:互联网 发布:seo基础入门书籍 编辑:程序博客网 时间:2024/05/26 09:55
为了更好的理解AOP,先来了解几个AOP的术语。
通知(Advice)
指切面(定义为aspect的类)中的工作;
spring切面可以应用的五种通知:
前置通知(Before):在目标方法被调用之前调用通知功能;
后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么;
返回通知(After-returning):在目标方法成功执行之后调用通知;
异常通知(After-throwing):在目标方法抛出异常后调用通知;
环绕通知(Around):通知报过了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为。
连接点(Join point)
连接点是在应用执行过程中能够插入切面的一个点。这个点可以是调用方法时,抛出异常时,甚至修改一个字段时。切面代码可以利用这些点插入到应用的正常流程之中,并添加新的行为。(切点方法中配置的匹配的方法都是连接点)
切点(Pointcut)
定义通知所要织入的一个或多个连接点。
切面(Aspect)
是通知和切点的结合。
引入(Introduction)
向现有的类添加新的方法和属性。
织入(Weaving)
织入是把切面应用到目标对象并创建新的代理对象的过程。切面在指定的连接点被织入到目标对象中。在目标对象的生命周期里有多个点可以进行织入:
编译期:切面在目标类编译时被织入,这种方式需要特殊的编译器。AspectJ的织入编译器就是以这种方式织入切面的。
类加载期:切面在目标类加载到jvm时被织入。这种方式 需要特殊的类加载器(ClassLoader),它可以在目标类被引入应用之前增强该目标类的字节码。AspectJ5的加载时织入(load-time weaving,LTW)就支持以这种方式织入切面。
运行期:切面在应用运行的某个时刻被织入。一般情况下,在织入切面时,AOP容器会为目标对象动态的创建一个代理对象。Spring AOP就是以这种方式织入切面的。
下图展示了这些概念是如何联系在一起的。
下面了解一下具体的切点表达式。在spring的切面中,主要使用execution指示器来设置匹配的方法。下图中的表达式能够设置当sleep()方法执行时触发的通知调用。
execution()指示器选择ViewController的sleep()方法,方法表达式以“*”号开始,表明了不关心方法返回值的类型。然后,指定了全限定方法名和类名。对于方法参数列表,使用两个点号(. .)表明切点要选择任意的sleep()方法,不需要考虑入参。
@RequestMapping("/sleep") public String sleep(){ System.out.println("sleeping………………zzzZZZ~~~~"); return "index"; }
@Component@Aspectpublic class SleepHelper { public SleepHelper(){ } @Pointcut("execution(* com.spring.controller.ViewController.*(..))") public void sleeppoint(){ } @Before("sleeppoint()") public void beforeSleep(){ System.out.println("马上要睡觉咯~~~"); } @AfterReturning("sleeppoint()") public void afterSleep(){ System.out.println("睡醒咯!"); } }
最后,项目是maven的项目,所以需要在pom.xml中添加切面对应的依赖jar包,并在applicationContext.xml文件中添加下图红框中的内容:
完成上述配置后,启动项目,浏览器中输入http://localhost:8080/sleep,控制台就会有如下输出:
OK,至此,一个简单的切面应用就完成咯~~~
- SpringMVC学习笔记(三) 切面详解
- SpringMVC学习笔记(三)
- SpringMVC学习笔记(三)
- Spring学习笔记(三)--面向切面编程AoP
- 《Spring实战》学习笔记(三)面向切面的Spring
- Spring学习笔记(三) 面向切面的Spring
- SpringMVC学习笔记三
- springMVC学习笔记三(controller控制器)
- J2EE系列之SpringMVC学习笔记(三)--SpringMVC控制器
- Spring学习笔记三:面向切面的Spring
- SpringMVC详解详解(三)
- SpringMVC学习(三)
- springmvc学习(三)
- 学习SpringMVC系列教程(三)Controller接口控制器详解
- 【框架学习】AOP切面详解
- Hibernate学习笔记(三)【配置详解】
- Hibernate学习笔记(三)【配置详解】
- Spring学习三(AOP面向切面编程)
- Velocity自定义标签
- ORA-01830: 日期格式图片在转换整个输入字符串之前结束
- Go语言 IDE之Gogland配置使用
- ffmpeg基本用法(转)
- 编译工具make、gmake、cmake、nmake和Dmake的区别
- SpringMVC学习笔记(三) 切面详解
- EEPROM 数据存储器 读写
- theano 中出现 TypeError: 'TensorVariable' object does not support item assignment
- connect exception:org.android.spdy.SpdyErrorException:TNET_JNI_ERR_LOAD_SO_FAIL
- JAVA经典算法
- jsBoolean对象
- 指数和对数的转化利用
- 优先队列
- 在windows下安装MySQL5.7