Spring AOP(xml)
来源:互联网 发布:微星 网络唤醒 编辑:程序博客网 时间:2024/05/21 02:50
AOP
面向切面编程,通过预编译的方式和运行期动态代理实现程序功能的统一维护的一种技术。可以在执行方法之前或者执行之后添加额外的功能。
struts的拦截器是在acton方法执行之前或者之后执行,有一些相似之处。
struts 拦截器链接
主要的功能
日志记录,性能统计,安全控制,事务处理,异常处理。
AOP基本概念
- Aspect 切面,模块化出来的在方法执行前后的操作
- Join point 连接点
- Advice 通知,方法执行之前或者之后执行的操作
- Point Cut 切入点
- Introduce 引入 ,添加新的方法和属性到当前类中
- Target object 方面通知对象,这个对象是代理对象,也称被通知对象
- Weaving Weaving 把方面连接到其它的应用程序类型或者对象上,并创建一个被通知的对象。
通知的类型
- 前置通知 在一个方法执行之前通知
- 后置通知 在一个方法执行之后通知
- 返回后通知 在一个方法执行之后并且有返回的时候通知
- 抛出异常后通知 在执行一个方法之后,只有抛出异常才会通知
- 环绕通知 在建议方法调用前后通知
基于xml的实现
导入aop所需的包
- aspectjweaver-1.7.4.jar
- aspectjrt-1.7.4.jar
- aopalliance-1.0.jar
- spring-aop-4.0.5.RELEASE.jar
创建切面类 TestAspect
package com.spring.aspect;import org.aspectj.lang.ProceedingJoinPoint;public class TestAspect { //前置通知 public void beforeAdvice() { System.out.println("这是前置通知"); } //后置通知 public void afterAdvice() { System.out.println("这是后置通知"); } //返回通知 public void returnAdvice(String js) { System.out.println("这是返回通知"); } //异常通知 public void exceptionAdvice(Exception e) { System.out.println("这是异常通知"); } //环绕通知 public Object roundAdvice(ProceedingJoinPoint point) { Object o = new Object() ; try { System.out.println("环绕通知前"); o = point.proceed(); System.out.println("环绕通知后"); } catch (Throwable e) { e.printStackTrace(); } return o; }}
创建测试bean
package com.spring.beans;public class BeanTest { public String method() { System.out.println("bean 方法执行"); return "sad"; } }
测试类
package com.spring.test;import com.spring.beans.BeanTest;import org.junit.Test;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainTest { @Test public void Test() throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); BeanTest test = (BeanTest) context.getBean("beanTest"); test.method(); context.close(); }}
测试结果
这是前置通知环绕通知前bean 方法执行环绕通知后这是返回通知这是后置通知
异常通知测试
<aop:config> <aop:aspect id="testAspect" ref="aspect"> <aop:pointcut id="pointCut" expression="execution(* com.spring.beans.BeanTest.*(..))"/> <aop:after-throwing method="exceptionAdvice" throwing="e" pointcut-ref="pointCut" /> </aop:aspect></aop:config>
修改测试bean
package com.spring.beans;import java.io.IOException;public class BeanTest { public String method() throws IOException { throw new IOException(); }}
结果
这是异常通知
同时使用异常通知和环绕通知的话,如果有异常,异常通知不会执行。
0 0
- Spring Aop xml代理
- spring AOP XML
- Spring AOP xml异常
- Spring Aop XML
- spring aop xml方式
- spring-AOP-xml
- Spring、XML配置AOP
- spring aop xml事务管理
- Spring - AOP基于XML
- Spring XML AOP
- Spring AOP(xml)
- spring aop xml实例
- spring aop xml配制
- Spring AOP xml
- spring aop xml配置
- Spring AOP之通过xml定义aop
- Spring之AOP XML方式
- spring aop 配置文件 xml文件
- 蟠桃记
- 统计字符串中每个字符出现的次数
- java8并行流操作
- linux下jsoncpp编译与使用
- 3.htm标签块及和行内
- Spring AOP(xml)
- 正则表达式基本元字符集
- Eclipse中Maven WEB工程tomcat调试
- java糖衣语法(Syntactic Sugar)详解
- 教女朋友学Python——编程是什么
- 框架模式MVP在Android中的使用
- IntelliJ IDEA 14 如何运行maven程序
- tensorflow设置显存自适应和显存比例.
- 人民币小写转大写函数 在网上找的,不错