- 浏览: 197712 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (121)
- java_基础 (26)
- java_web (15)
- javascript (9)
- extJS (0)
- dwr (0)
- guobin_ETL (1)
- guobin_ssh (17)
- guobin_webservice (1)
- guobin_jbpm (0)
- guobin_jquery (0)
- guobin_acegi (1)
- guobin_poi/jxl (2)
- guobin_multiThread (0)
- guobin_名称解释 (0)
- guobin_FLEX (0)
- guobin_php (0)
- guobin_ORACLE (1)
- guobin_mysql (0)
- guobin_linux (0)
- guobin_powerDesigner (0)
- guobin_visol (0)
- guobin_ER/STUDIO (0)
- guobin_jmesa (0)
- guobin_weblogic (0)
- guobin_kettle (0)
- guobin_一路风雨 (5)
- guobin_spark (0)
- java_xml (7)
- guobin_规则引擎 (0)
- 插件开发 (2)
- 软件管理 (3)
- spring mvc (2)
- java_jni (1)
- eclipse (1)
- oracle (0)
- 项目学习笔记 (1)
- java多线程学习记录 (9)
- websphere性能设置和日常维护 (2)
- (1)
- 系统软件架构设计 (1)
- ces (1)
- 需求分析 (2)
- IBM-CICS GATEWAY (1)
- 工具使用 (1)
- 网络信息安全编程 (1)
最新评论
-
yzh__:
学习一个
Hibernate 自关联注解方式 -
xiaoyahuang:
"2)将Sysdeo Plugin下的DevLoad ...
eclipse项目引用 -
guobin6125:
guobin6125 写道sfasshahhah评论的评论
欢迎使用Kit! -
guobin6125:
sfass
欢迎使用Kit! -
guobin6125:
tst23
欢迎使用Kit!
系统的异常处理机制是衡量一个系统设计的关键因素,良好的异常处理机制能在系统出现异常时准确的找到问题的所在。
spring aop对异常的处理有良好的支持。spring 提供了一个接口 ThrowsAdvice,该接口里面没有任何方法,但是实现类里面必须的实现
afterThrowing(Method method, Object[] args, Object target, RuntimeException throwable) 或者
afterThrowing(RuntimeException throwable)
如果需要记录发生异常方法的详细信息,则实现第一个方法就行,如果只记录发生的异常,实现第二个方法就ok!
那么异常的处理应该在什么位置来做处理呢?
一般我们的系统都应该有以下几个层次:Action--->Service---->DAO
DAO负责直接和数据库打交道,也是发生异常频率较高的地方,而service只是调用DAO所提供给外面的接口,action里面大部分的操作也是调用service的服务,再加上少数其他的逻辑,这部分的异常可以单独处理!下面我们主要关心DAO层的异常处理。
1、定义接口
- package com.beckham.dao;
- import java.util.List;
- import com.beckham.model.User;
- /**
- * @author Owner
- * Jan 19, 2010 10:15:32 PM
- *
- * struts2
- * com.beckham.dao
- * UserDAO.java
- */
- public interface UserDAO {
- public boolean userExsit(String username) throws Exception;
- public User findById(int id) throws Exception;
- public List<User> queryUser(String hql,int beginIndex) throws Exception;
- public void saveUser(User user) throws Exception;
- public int gettotalSize(String hql) throws Exception ;
- }
2、实现
- package com.beckham.daoimp;
- import java.util.List;
- import com.beckham.dao.SuperDAO;
- import com.beckham.dao.UserDAO;
- import com.beckham.model.User;
- import com.beckham.util.PropertyUtil;
- /**
- * @author Owner
- * Jan 19, 2010 10:15:50 PM
- *
- * struts2
- * com.beckham.daoimp
- * UserDAOImp.java
- */
- public class UserDAOImp extends SuperDAO implements UserDAO {
- public User findById(int id) throws Exception {
- User user = null;
- try {
- user = (User) this.getHibernateTemplate().get(User.class, id);
- } catch (Exception e) {
- e.printStackTrace();
- throw new Exception("主键查询用户失败", e);
- }
- return user;
- }
- public void saveUser(User user) throws Exception {
- try {
- this.getHibernateTemplate().save(user);
- } catch (Exception e) {
- e.printStackTrace();
- throw new Exception("增加用户失败", e);
- }
- }
- @SuppressWarnings("unchecked")
- public List<User> queryUser(String hql, int beginIndex) throws Exception {
- try {
- return (List<User>) this.getHibernateTemplate().getSessionFactory()
- .getCurrentSession().createQuery(hql).setFirstResult(
- beginIndex).setMaxResults(
- PropertyUtil.getPageSize()).list();
- } catch (Exception e) {
- e.printStackTrace();
- throw new Exception("查询用户出现异常", e);
- }
- }
- public boolean userExsit(String username) throws Exception {
- boolean bl = true;
- String hql = "from User where username='" + username + "'";
- if (queryUser(hql, 0).size() == 0) {
- bl = false;
- }
- return bl;
- }
- public int gettotalSize(String hql) throws Exception {
- int totalsize = 0;
- try {
- totalsize = Integer.parseInt(this.getHibernateTemplate().find(hql)
- .get(0).toString());
- } catch (Exception e) {
- e.printStackTrace();
- throw new Exception("查询用户总数失败", e);
- }
- return totalsize;
- }
- }
这里需要说明的是,这里的异常我没有细致的分类,都是throws Exception。
service层的代码就省略了,因为只是调用DAO层的方法,下面来写异常的拦截
- package com.beckham.aop;
- import java.lang.reflect.Method;
- import org.springframework.aop.ThrowsAdvice;
- /**
- * @author Owner Jan 18, 2010 2:37:10 PM 处理DAO层的异常 struts2 com.beckham.aop
- * ExceptionLog.java
- */
- public class ExceptionLog implements ThrowsAdvice {
- /**
- * Owner
- * 参数解释 Method method 执行的方法
- * Object[] args 方法参数
- * Object target 代理的目标对象
- * Throwable throwable 产生的异常
- * Jan 18, 2010 3:21:46 PM
- */
- public void afterThrowing(Method method, Object[] args, Object target,
- RuntimeException throwable) {
- System.out.println("产生异常的方法名称: " + method.getName());
- for(Object o:args){
- System.out.println("方法的参数: " + o.toString());
- }
- System.out.println("代理对象: " + target.getClass().getName());
- System.out.println("抛出的异常: " + throwable.getMessage()+">>>>>>>"
- + throwable.getCause());
- System.out.println("异常详细信息: "+throwable.fillInStackTrace());
- }
- }
最后当然就是在配置文件里面配置了
- <bean id="log" class="com.beckham.aop.LogAdvice"></bean>
- <bean id="exceptionLog" class="com.beckham.aop.ExceptionLog"></bean>
- <!-- beanName自动代理 -->
- <bean id="logAdvice"
- class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
- <property name="beanNames">
- <list>
- <value>userDAO</value>
- </list>
- </property>
- <property name="interceptorNames">
- <list>
- <value>log</value>
- <value>exceptionLog</value>
- </list>
- </property>
- </bean>
到此,通过spring AOP拦截异常就完成了,这里只是拦截DAO层的异常,此方法的好处就是处理异常和功能实现完全分离开,只需要在写方法的时候要记得抛出相应的异常,当出现异常时ThrowsAdvice就会拦截到该异常,并获取该异常的详细信息。
发表评论
-
解决jquery load 缓存数据 .
2012-08-19 16:03 1962当jquery load 一个页面时候 只加载一次 解决方 ... -
Socket 短连接、长连接
2012-08-14 15:11 1299socketSocket协议的形象描述socket的 英文原 ... -
easy ui 验证框02
2012-07-01 10:29 997easyui的验证分为纯客户端验证和ajax验证。 1. ... -
easy ui 验证框 01
2012-07-01 10:28 2771使用过程中的一积累,备查。 EasyUI 验证框使用方法 ... -
16款 web开发的工具
2012-05-24 13:33 870http://www.iteye.com/news/25137 ... -
欢迎使用Kit!
2012-05-08 10:26 1036http://xueduany.github.com/KitJ ... -
c3p0详细配置
2011-06-30 10:36 805c3p0详细配置 官方文档 : http://www.mch ... -
spring c3p0
2011-06-30 10:12 1278C3P0在spring中的配置 2007-01-30 11:2 ... -
spring 事务管理配置
2011-05-26 14:07 9892011-03-24 Spring3.0中的事务控制的配置方法 ... -
oracle存储过程
2011-03-17 15:37 833Oracle 存储过程 关键字: storedprocedur ... -
使用Struts2拦截器实现日志管理系统
2011-03-12 12:33 972最近一个项目客户要求能够监控用户对系统的详细操作步骤,比如某人 ... -
sql优化
2010-03-04 11:18 17861:前言 数据库 ... -
下拉框中 可编辑
2009-09-21 13:19 981<div style="position: r ... -
去除重复登录情况 --登录不重复
2009-08-17 17:25 1308以前做财务项目时遇到了一个问题,以前我都没有考虑过,这次 ...
相关推荐
SpringBoot结合AspectJ实现SpringAOP拦截指定方法的知识点涵盖了多个方面,这包括Spring AOP的基本概念、SpringBoot的应用、切点(Pointcut)与通知(Advice)的定义、自定义注解以及AspectJ的使用。以下是这些知识...
Spring AOP模块提供了实现AOP规范的功能,它允许开发者定义“切面”来封装系统中的横切关注点,如日志、事务管理等。该jar文件包含了Spring AOP的核心类和接口,如`org.springframework.aop.*`包下的`...
2. **Spring AOP**:Spring框架提供了自己的AOP实现,它基于代理模型,可以对方法调用进行拦截。Spring AOP可以与Spring的IoC容器无缝集成,方便地实现切面的创建和管理。 3. **AspectJ**:AspectJ是一个强大的AOP...
Spring AOP是Spring框架的重要组成部分,它提供了面向切面编程的能力,使得开发者可以在不修改源代码的情况下对程序进行横切关注点(如日志、事务管理等)的处理。`spring-aop.xsd`文件是Spring AOP配置的XML Schema...
方法拦截器可以在方法调用前、调用后或抛出异常时进行干预,实现诸如日志记录、性能监控、事务管理等切面逻辑。 2. `org.aopalliance.intercept.Interceptor`: 这是一个更抽象的接口,它是`MethodInterceptor`的超...
例如,在Spring框架中,我们可以通过实现这个接口来创建自定义的AOP拦截器,实现如事务管理、缓存控制等功能。 `Interceptor`接口则是AOP联盟的通用拦截器接口,它可以被任何AOP框架所使用。虽然`Interceptor`接口...
本节将详细介绍如何使用Spring AOP实现流程日志跟踪,主要关注于如何通过AOP拦截特定的类和方法来进行日志记录。 ##### 3.1 配置Spring AOP 在Spring配置文件中定义切面和切入点表达式是非常关键的一步。一般来说...
Spring AOP,即Spring的面向切面编程,是Spring框架的重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强或统一处理的方法。本文将围绕Spring AOP的源码分析,探讨其核心概念、工作原理以及在...
"springaop拦截controller日志"这个主题旨在讲解如何使用Spring AOP来拦截Controller层的方法调用,并在方法执行前后记录相关日志。 首先,了解Spring AOP的基本概念。AOP是一种编程范式,它允许程序员定义“切面”...
它定义了一些通用的AOP接口,比如`org.aopalliance.intercept.MethodInterceptor`和`org.aopalliance.intercept.MethodInvocation`,使得不同的AOP框架(如Spring和AspectJ)可以共享相同的拦截器(interceptors)。...
如果方法抛出异常,我们可以捕获并记录它,从而实现异常管理。 通过这种方式,我们可以在Spring MVC中利用AOP实现对Controller方法的透明日志管理,不仅记录正常流程,也能捕获和记录异常,提升系统的可维护性和...
在Spring Boot应用中,Spring AOP(面向切面编程)是一种强大的工具,它允许我们创建横切关注点,如日志记录、权限检查等,这些关注点可以被编织到应用程序的多个点上,而无需侵入核心业务逻辑。在本案例中,我们将...
【标题】"spring-aop.rar_java aop_spring aop" 涉及的主要知识点是Spring框架中的面向切面编程(AOP)以及Java基础知识。这个压缩包可能包含了一个简单的Spring AOP应用示例,同时也涵盖了Java的一些核心概念,如...
在Java Web开发中,Spring AOP(面向切面编程)是一种强大的工具,它允许开发者将关注点分离,提高代码的可重用性和可维护性。本文将深入探讨Spring AOP的核心概念、工作原理以及如何在实际项目中应用。 **1. ...
Spring AOP 是一种面向切面编程的技术,它允许我们在不修改源代码的情况下,对应用程序的特定部分(如方法调用)进行增强。在 Spring 中,AOP 的实现主要依赖于代理模式,有两种代理方式:JDK 动态代理和 CGLIB 动态...
本例提供了一个简单的AOP拦截器实现,我们可以从这个基础出发,深入理解和探讨AOP的核心概念、工作原理以及其在实际开发中的应用。 首先,AOP的主要目标是解决程序中的横切关注点,如日志记录、事务管理、性能监控...
在Spring AOP中,AOP Alliance接口如org.aopalliance.intercept.MethodInterceptor和org.aopalliance.aop.Advice是关键,它们定义了拦截器和通知(Advice)的行为。开发者可以实现这些接口来创建自定义的通知,例如...
`com.springsource.org.aopalliance.jar`是AOP Alliance的实现,它提供了一套统一的接口,使得不同的AOP框架(如Spring AOP和AspectJ)之间可以互相协作。AOP Alliance定义了两个主要接口:`org.aopalliance....
5. **Exception Handling**:Spring MVC允许开发者定义全局和局部的异常处理器,通过`@ExceptionHandler`注解处理特定类型的异常,提供统一的错误页面或者JSON响应。 6. **RESTful Support**:Spring Web还支持...
在Spring AOP中,你可以使用这些接口来实现自定义的拦截器,从而在方法调用前后插入额外的功能,如日志记录、事务管理等。 接着,我们来看`aspectjweaver.jar`。AspectJ是Spring AOP支持的一个强大的第三方AOP框架...