- 浏览: 441928 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
sunwang810812:
万分感谢中!!!!!这么多年终于看到一个可运行可解决的方案!! ...
POI 后台生成Excel,在前台显示进度 -
zzb7728317:
LZ正解
Spring Jackson AjaxFileUpload 没有执行回调函数的解决办法 -
sleeper_qp:
lz是在源码上修改的么? 源码的话你重新编译一遍了么? 可 ...
由nutch readseg -dump 中文编码乱码想到的…… -
shenjian430:
请问你改好的程序在写在哪了?
由nutch readseg -dump 中文编码乱码想到的…… -
yinxusen:
It seems to be the bug occur in ...
Mahout Local模式 执行example的注意点
转:http://www.blogjava.net/amigoxie/archive/2007/07/24/132142.html(此原文有一点小错误O(∩_∩)O~)
Spring支持四种拦截类型:目标方法调用前(before),目标方法调用后(after),目标方法调用前后(around),以及目标方法抛出异常(throw)。
最近用到spring的AOP来实现异常拦截,用到了spring的ThrowsAdvice。ThrowsAdvice是一个标示接口,我们可以在类中定义一个或多个,来捕获定义异常通知的bean抛出的异常,并在抛出异常前执行相应的方法。
我想大家可能都在项目中有过这样的需求,想在某种异常抛出时进行一些记录操作,例如记录错误日志到数据库或日志文件中,但把这些代码分布到项目各处不但难于管理,并且代码量巨大,用Spring的AOP来实现拦截不失为一个比较好的方法。
下面,让我们来感受一下它的魅力吧。
1. 操作类TestBean
public class TestBean { public void method1() throws Exception { throw new Exception("Exception happened!"); } /** * 将字符串转换为整数. */ public int changeToNumber(String number) throws NumberFormatException { // 当number为空或非数字时,将抛出NumberFormatException int num = Integer.parseInt(number); return num; } }
2. 错误日志拦截类ExceptionAdvisor
import java.lang.reflect.Method; import org.springframework.aop.ThrowsAdvice; import org.springframework.aop.framework.ProxyFactory; public class ExceptionAdvisor implements ThrowsAdvice { public void afterThrowing(RuntimeException rx) { } /** * 对未知异常的处理. */ public void afterThrowing(Method method, Object[] args, Object target, Exception ex) throws Throwable { System.out.println("*************************************"); System.out.println("Error happened in class: " + target.getClass().getName()); System.out.println("Error happened in method: " + method.getName()); for (int i = 0; i < args.length; i++) { System.out.println("arg[" + i + "]: " + args[i]); } System.out.println("Exception class: " + ex.getClass().getName()); System.out.println("*************************************"); } /** * 对NumberFormatException异常的处理 */ public void afterThrowing(Method method, Object[] args, Object target, NumberFormatException ex) throws Throwable { System.out.println("*************************************"); System.out.println("Error happened in class: " + target.getClass().getName()); System.out.println("Error happened in method: " + method.getName()); for (int i = 0; i < args.length; i++) { System.out.println("args[" + i + "]: " + args[i]); } System.out.println("Exception class: " + ex.getClass().getName()); System.out.println("*************************************"); } public static void main(String[] args) { TestBean bean = new TestBean(); ProxyFactory pf = new ProxyFactory(); pf.setTarget(bean); pf.addAdvice(new ExceptionAdvisor()); TestBean proxy = (TestBean) pf.getProxy(); try { proxy.method1(); } catch (Exception ignore) { System.out.println("Exception in method1 catch"); } try { proxy.changeToNumber("amigo"); } catch (Exception ignore) { System.out.println("Exception in changeToNumber catch"); } } }运行ExceptionAdvisor类后,结果如下:
*************************************
Error happened in class: com.exception.TestBean
Error happened in method: method1
Exception class: java.lang.Exception
*************************************
Exception in method1 catch
*************************************
Error happened in class: com.exception.TestBean
Error happened in method: changeToNumber
args[0]: amigo
Exception class: java.lang.NumberFormatException
*************************************
Exception in changeToNumber catch
发表评论
-
hibernate的Criteria Query(转)
2014-06-29 21:22 717当查询数据时,人们往往需要设置查询条件。在SQL或HQL语句 ... -
【转】hibernate 中 Criteria 的使用介绍
2014-06-29 21:21 970转自:http://www.blogjava.net/jjs ... -
【转】Hibernate中Criteria的完整用法
2014-06-29 21:20 724转自:http://www.cnblogs.com/maba ... -
Java读写Oracle中的BLOB和CLOB
2013-10-16 18:00 2014转:http://www.iteye.com/topic/6 ... -
Spring的事务管理入门:编程式事务管理(TransactionTemplate)
2013-10-15 16:20 1031可有效应用于Oracle 临时表的insert和select ... -
jdbcTemplate 调用存储过程和回到函数
2013-10-15 09:09 3778转:http://blog.csdn.net/dancelo ... -
Spring3核心技术之JdbcTemplate
2013-10-15 09:03 1330转:http://zhou137520.iteye.com/ ... -
验证码在WebLogic下报错java.io.IOException: response already committed
2013-05-06 14:16 2608我的登录验证码代码,一个jsp,在Tomcat下没有问题,但 ... -
Struts2在eclipse的console中总是出现WARN OgnlValueStack:45 - Could not find property
2013-04-17 18:00 1728struts2 在发开时,控制台如输出大量警告信息,太烦人 ... -
【转】Eclipse自动关闭解决方法及eclipse.ini设置
2013-03-29 15:21 3812转自:http://liujun5563.blog.163. ... -
[转]批量将Java源代码文件的编码从GBK转为UTF-8
2012-11-12 13:43 1509转自:http://my.oschina.net/binny/ ... -
对代理模式与Java动态代理类的理解
2012-09-25 01:51 01. 代理模式 代理模式的作用是:为其他对象提供一种 ... -
【转】 java中yield(),sleep()以及wait()的区别
2012-09-13 22:49 866从操作系统的角度讲,os会维护一个ready queue(就绪 ... -
java 继承类 变量、静态变量、构造函数执行顺序
2012-09-10 16:07 1052包含普通变量、静态变量、构造函数、继承类的执行顺序为: 1、父 ... -
京东2012春笔试编程题
2012-09-10 12:58 01、求给定数组中最大的K个数function array[] ... -
Java实现Stack、Queue、BinaryTree
2012-09-11 10:28 14951、用数组实现Stack: public class MySt ... -
Java中a++和++a的分析
2012-09-18 08:34 2869本人从编译后的代码来看a++和++a的区别: 先看代码1: ... -
华为2012校园上机编程题
2012-09-09 16:04 0/** * 1. 手机号码合法 ... -
2011年9月7日,华为上机题Java实现
2012-09-08 15:58 0第二题: /** * 输入字符串长度len,字符串str, ... -
Java对于Cookie的操作详解
2012-09-18 08:34 8211.设置Cookie Cookie cookie = n ...
相关推荐
它是一个实现了`org.springframework.aop.MethodBeforeAdvice`、`org.springframework.aop.AfterReturningAdvice`或`org.springframework.aop.ThrowsAdvice`等接口的对象,可以在方法调用前后执行自定义逻辑。...
Spring AOP 是Spring框架提供的一个功能模块,它允许开发者将横切关注点(cross-cutting concerns)从业务逻辑中解耦出来,通过在方法调用前后进行拦截来实现。这些横切关注点通常是一些与业务逻辑不直接相关的服务...
Spring AOP,即面向切面编程,是Spring框架的核心组件之一,它允许程序员在不修改原有业务代码的情况下,对程序进行功能增强。本篇文章将详细阐述Spring AOP的基本概念、种类、代理原理、通知类型以及切入点,帮助你...
首先,我们需要创建一个拦截器类,这个类通常会实现Spring的`MethodBeforeAdvice`、`AfterReturningAdvice`或`ThrowsAdvice`接口,或者自定义一个Advisor。在这个案例中,文件名为`LogInterceptor.java`的类可能是...
通过实现`org.aopalliance.intercept.MethodInterceptor`接口,我们可以拦截并自定义任何方法的调用。`invoke`方法是核心,它接收一个`InvocationContext`对象,包含了调用的目标方法、目标对象和其他相关信息。我们...
- **Spring AOP 中的 Aspect**:通常由 Advisor 实现,包含了一个 Pointcut 和一个或多个 Advice。 ##### Weaving(织入) - **定义**:将 Aspect 注入到应用程序中,从而实现 AOP 的过程。 - **Spring AOP 的织入...
Spring提供了丰富的AOP支持,包括声明式的AOP实现,使得开发者可以通过配置文件或者注解来实现AOP。 ##### 1. 添加Spring AOP库 为了在项目中使用Spring AOP,首先需要添加相应的依赖库。例如,在MyEclipse中,可以...
Spring AOP(Aspect Oriented Programming)是Spring框架的核心特性之一,它允许程序员实现关注点分离,将横切关注点(如日志、事务管理、安全检查)从核心业务逻辑中解耦出来。在AOP中,横切关注点被称为切面,而...
Spring提供了`org.springframework.aop.ThrowsAdvice`接口来实现异常后通知。 5. **环绕通知(Around Advice)** 环绕通知是最强大的通知类型,它在方法调用前后都能执行,并且可以控制方法是否执行以及如何执行。...
- Spring AOP使用Java动态代理或CGLIB字节码增强实现代理机制。 - 当目标类实现了接口时,Spring使用JDK的Proxy类生成动态代理对象。 - 对于没有接口的类,Spring使用CGLIB库生成目标类的子类,实现方法的增强。 ...
6. **AOP代理**:Spring AOP使用动态代理技术来实现AOP,主要通过`ProxyFactoryBean`来创建代理对象。它可以配置`proxyInterfaces`和`interceptorNames`来指定代理接口和拦截器。 7. **Pointcut**:定义了哪些连接...
- `org.springframework.aop.MethodBeforeAdvice`,`org.springframework.aop.ThrowsAdvice` 等接口:实现自定义的通知。 **谓词分派实例** 假设我们有一个业务场景,需要根据用户的角色动态决定是否允许访问某个...
Spring 是一个广泛使用的 Java 应用开发框架,它提供了丰富的功能,包括依赖注入(DI)、面向切面编程(AOP)、事务管理等。以下将详细介绍 Spring 中的 AOP 相关知识点。 1. **AOP(面向切面编程)** - **静态代理**...
- **实现**:通过实现`Validator`接口或使用Spring提供的`DataBinder`类。 - **示例**:定义一个实现`Validator`接口的类,用于验证某个Java对象的合法性。 #### Controller组件继承架构 - **定义**:Spring MVC...
通过分析Spring AOP的适配器模式,我们可以看到Advice(通知)如MethodBeforeAdvice、AfterReturningAdvice、ThrowsAdvice等都有对应的拦截器,这些拦截器实现了适配器功能,将Advice的增强方法转化为拦截器可以调用...