JAVA注解在SSH开发中的简单应用

在系统开发过程中,出现错误在所难免。虽然系统出错时控制台也会报错,但是因为系统控制台输出太多,往往不能快速定位出现错误的功能点及原因。在此通过使用注解,结合spring的AOP,来制作一个错误输出拦截器。

首先写一个注解类Catcher:

@Target({ ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface Catcher {
    String name();//模块名
}

然后定义一个切面:ExceptionInterceptor

@Aspect
public class ExceptionInterceptor  {
    private Logger logger = Logger.getLogger(ExceptionInterceptor.class);
    
    /**
     * 拦截service层带有Catcher注解的所有异常
     * @param point
     * @param cat
     * @param ex
     */
    @AfterThrowing(pointcut="execution(* com.*.service.*.*(..))&&@annotation(cat)",throwing="ex")
    public void serviceSite(JoinPoint point,Catcher cat,Throwable ex){
        StackTraceElement st=ex.getStackTrace()[0];
        logger.error("产生错误的模块:"+cat.name());
        logger.error("产生错误的类:"+point.getTarget().getClass().getSimpleName());
        logger.error("产生异常的方法:"+point.getSignature().getName());
        logger.error("出错行数:"+st.getLineNumber());
        logger.error("异常类型:"+ex.getClass().getName());
        logger.error("错误信息:"+ex.getMessage());
    }
}

注:ExceptionInterceptor需要在spring.xml中定义

<bean id="exceptionInterceptor" class="com.util.ExceptionInterceptor">
        <property name="sessionFactory" ref="sessionFactory" />
</bean>

用法:

因为在拦截器中拦截的是service层的方法(当然也可以拦截其它地方),所以对于需要拦截的方法,都要加上@Catcher注解。

@Catcher(name="需要捕获错误的模块")
public void test(){
    throw new RuntimeException("此模块抛出异常");
}

运行这个方法时,系统就会报错:

产生错误的类:类名
产生异常的方法:test
出错行数:相应的行数
异常类型:RuntimeException
错误信息:出现了一个错误

是不是很直观呢?

时间: 2024-11-02 15:45:36

JAVA注解在SSH开发中的简单应用的相关文章

Java 反射在实际开发中的应用

运行时类型识别(RTTI, Run-Time Type Information)是Java中非常有用的机制,在java中,有两种RTTI的方式,一种是传统的,即假设在编译时已经知道了所有的类型:还有一种,是利用反射机制,在运行时再尝试确定类型信息. 本篇博文会结合Thinking in Java 的demo 和实际开发中碰到的例子,对Java反射和获取类型信息做总体上整理.文章主要分为三块: Java类加载和初始化 Java中RTTI Java利用反射获取运行时类型信息 一:Java类加载和初始

Java 设计模式之模板方法开发中应用

模板方法差不多是Java设计模式中除单例之外的另一种非常简单也是我们在写程序时非常常用的一种方法了.以至于当你看到模板方法的设计模式时你会感觉到,这不是我在程序中经常用到的方法么. 定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类不可以改变一个算法的结构即可重定义该算法的某些特定步骤. 下面是我总结的模板方法中具体的代码实现通用框架 1:抽象的模板类: package template; public abstract class AbstractClass { protect

java新手在实际开发中所遇到的问题及解决方法小结,(持续更新遇到的问题)

?从事开发一年有余,想到自己初入公司时的困窘,在此把我记忆中在实际开发中所遇到的问题做一总结性的小结,为自己以后方便查阅,以及后来者遇到相同问题时解决更加方便快捷,希望大家集思广益把自己遇到的问题及解决方法写出来,添砖加瓦.为后来者给予一点帮助! 实用案例 如何使用Java实现汉诺塔问题 Java中定时器的使用方法 Java打印杨辉三角的具体实现代码 Java中如何实现分页功能 Java读取大文件如何高效率 Java中生成随机数的几种方法 Java zip压缩单个文件实现方法 如何计算Java对

[转]Java 反射在实际开发中的应用

一:Java类加载和初始化 1.1 类加载器(类加载的工具) 1.2 Java使用一个类所需的准备工作 二:Java中RTTI 2.1 :为什么要用到运行时类型信息(就是RTTI) 2.2  :RTTI在运行时如何表示 2.3   :  Class对象 2.3 : RTTI形式总结: 三:Java利用反射获取运行时类型信息 3.1 : 获取的方式 3.2 :   动态代理 四: Java反射在实际开发中应用 4.1  :在web项目中创建统一的拦截层 4.2 : 用于webService服务 :

[Java Web]2\Web开发中的一些架构

1.企业开发架构: 企业平台开发大量采用B/S开发模式,不管采用何种动态Web实现手段,其操作形式都是一样的,其核心操作的大部分都是围绕着数据库进行的.但是如果使用编程语言进行数据库开发,要涉及很多诸如事务.安全等操作问题,所以现在开发往往要通过中间件进行过渡,即,程序运行在中间件上,并通过中间件进行操作系统的操作,而具体一些相关的处理,如事务.安全等完全由中间件来负责,这样程序员只要完成具体的功能开发即可. 2.Java EE架构: Java EE 是在 Java SE 的基础上构建的,.NE

java注解及在butternife中的实践和原理

1.  背景 之前去一个公司,说到了java的注解,问java的注解有几种方式,然后我提到了android中的butternife和afinal注解工具,我们知道butternife在6.1版本的时候还是InjectView,可以到7.1的时候用的却是BInd,这里面有什么区别吗.简单的说,InjectView是在运行的时间进行注解,而BInd在android安装的时候就执行了,肯定后者的执行效率更高些. 接下来说说java的注解吧. 2.  什么是注解 我们有必要对JDK 5.0新增的注解(A

Java IO在实际开发中的应用

IO是java绕不过去的槛,在开发中io无处不在, 正如同 世界上本没有路,java io写多了,也就知道了大体是什么意思,在读完thinking in java 感觉就更清晰了,结合具体的业务场景,整理一下 ,什么是IO.为什么JAVA要这么设计IO. 先来一道开胃菜 我想要读取控制台输入的字符 解释一下:我从控制台读取一行字符,然后打印一下.这就是一个简单的流了. 整理一下: 就是我先 得到一个用于读取 控制台输入的流,然后 我·打印我得到的东西,这里有个细节就是 流一定得关闭,这是底线,关

Java 数据类型在实际开发中应用

在前边的博文中,我已经介绍了Java核心的容器IO等,现在我来说一下java中的数据类型.在java中,一切东西皆为对象(这句话意思是java中绝大数情况都用对象),极少数不是对象的,也存在与之对应的对象(比如基本数据类型存在与之对应的包装类,数组有List对象可以代替) Java中数据类型 主要有“基本数据类型”.“String”.“引用类型” (基本的引用类型不多做介绍,在下一篇博文中着重介绍“枚举”,也算是引用类型的一种) 一:基本数据类型 1.1基本数据类型的定义 byte.char.i

基于 java 注解的 csv 读写框架更加简单灵活

CSV 基于 java 注解的 csv 读写框架. 相关框架 Apache commons-csv super-csv 简单看了下,这两个框架提供的特性都非常的基础. 创作原由 以前觉得 csv 文件的读写非常简单,就懒得封装. 最近一个月写了两次 csv 文件相关的东西,发现要处理的细节还是有的,还浪费比较多的时间. 比如: UTF-8 中文编码使用 excel 打开乱码,因为缺少 BOM 头. 不同类型字段转化为字符串,顺序的指定,head 头的指定,如果手写都会很繁琐. 读取的时候最后 ,