- 浏览: 193383 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 1920当jquery load 一个页面时候 只加载一次 解决方 ... -
Socket 短连接、长连接
2012-08-14 15:11 1262socketSocket协议的形象描述socket的 英文原 ... -
easy ui 验证框02
2012-07-01 10:29 957easyui的验证分为纯客户端验证和ajax验证。 1. ... -
easy ui 验证框 01
2012-07-01 10:28 2725使用过程中的一积累,备查。 EasyUI 验证框使用方法 ... -
16款 web开发的工具
2012-05-24 13:33 830http://www.iteye.com/news/25137 ... -
欢迎使用Kit!
2012-05-08 10:26 1001http://xueduany.github.com/KitJ ... -
c3p0详细配置
2011-06-30 10:36 779c3p0详细配置 官方文档 : http://www.mch ... -
spring c3p0
2011-06-30 10:12 1250C3P0在spring中的配置 2007-01-30 11:2 ... -
spring 事务管理配置
2011-05-26 14:07 9602011-03-24 Spring3.0中的事务控制的配置方法 ... -
oracle存储过程
2011-03-17 15:37 807Oracle 存储过程 关键字: storedprocedur ... -
使用Struts2拦截器实现日志管理系统
2011-03-12 12:33 937最近一个项目客户要求能够监控用户对系统的详细操作步骤,比如某人 ... -
sql优化
2010-03-04 11:18 17421:前言 数据库 ... -
下拉框中 可编辑
2009-09-21 13:19 956<div style="position: r ... -
去除重复登录情况 --登录不重复
2009-08-17 17:25 1275以前做财务项目时遇到了一个问题,以前我都没有考虑过,这次 ...
相关推荐
项目中含有一整个springboot实现aop的功能,在拦截的方法形式上有两种一种是通过切点设置为拦截某个包路径下面的类中的所有方法;还有一种是基于某个自定义注解的.
Spring MVC AOP通过自定义注解方式拦截Controller等实现日志管理, springMVC里做添加AOP拦截,用于捕获异常。
springaop拦截controller日志
死磕Spring之AOP篇 - Spring AOP两种代理对象的拦截处理(csdn)————程序
Spring AOP 拦截器 Advisor Spring AOP 拦截器 Advisor
spring aop切面拦截指定类和方法实现流程日志跟踪 一般情况下,在不侵入业务代码的情况下,需要做流程日志跟踪是比较合理的 采用springaop切面思想
spring aop 拦截 实例spring aop 拦截 实例spring aop 拦截 实例
Spring Mvc AOP通过注解方式拦截controller等实现日志管理
springboot spring aop 拦截器 注解方式实现脱敏(涉及到:pom.xml -->application.properties --->启动类-->拦截器)
spring aop 拦截实例,下载下来直接就可以用了,很好很方便。
Spring 实现AOP需要三个第三方的jar包,分别是aspectjrt.jar,aspectjweaver.jar,aopalliance-1.0.jar
<aop:after-throwing method="exception" pointcut-ref="pointCut"/> aop异常通知 以上结合起来意思就是在调用com.spring.service包或子包下的所有方法之前或之后或抛出异常时依次调用id为logIntercepter的类中的...
Spring源代码解析7:Spring AOP中对拦截器调用的实现 .doc Spring源代码解析8:Spring驱动Hibernate的实现.doc Spring源代码解析9:Spring Acegi框架鉴权的实现.doc Spring源代码解析10:Spring Acegi框架授权的实现...
ssh2登陆+spring aop做拦截
用spring写的小示例程序,拦截某一层的所有方法。可以在调用之前、之后、抛出异常拦截调用,日志打印。
spring aop 拦截系统操作日志和异常日志,存储到数据库中的全过程
采用SpringAOP拦截Controller,Service实现操作日志管理,统一处理异常,登陆日志管理,是SpringAOP的应用实践。通过SpringAOP的处理,可以方便移植日志管理功能,是个不错的学习demo
SpringAOP原理及拦截器.pdf
SpringAOP原理及拦截器.docx
spring mvc利用aop日志实现对controller层的拦截