spring aop 6 环绕通知记录应用的日志
2016-01-15 10:46
399 查看
使用的框架是spring mvc+spring
最近想利用spring aop的环绕通知来处理web的日志问题,总的来讲,如果在controller层做切入,则难监控实际运行情况,在service层做切入,则只能监控到service层的情况,通过捕捉service抛出的异常来记录日志,对于目前本人应用而言,已经足够了,先将记录如下:
代码:
@Component
@Aspect
public class ExceptionLog {
/**
* 61 * 环绕通知需要携带ProceedingJoinPoint类型的参数
* 62 * 环绕通知类似于动态代理的全过程:ProceedingJoinPoint类型的参数可以决定是否执行目标方法。
* 63 * 而且环绕通知必须有返回值,返回值即为目标方法的返回值
* 64
*/
@Around("execution(* *com.test.service..*.*(..))")
public Object aroundMethod(ProceedingJoinPoint pjd) throws Throwable {
Object result = null;
String methodName = "class:" + pjd.getTarget().getClass().getName() + " method:" + pjd.getSignature().getName(); //获取方法名称
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); //获取请求的URL//执行目标方法
try {
//前置通知
result = pjd.proceed();//返回通知
} catch (Throwable e) {
//异常通知
// System.out.println("The method " + methodName + " occurs expection : " + e);throw e; /让spring处理异常
}finally {
//记录日志
}
return result; //必须返回结果,否则controller无法获取service返回的结果(正常情况下)
}
}
spring 配置:
web.xml配置(主要是用于获取方便程序获取HttpServletRequest)
最近想利用spring aop的环绕通知来处理web的日志问题,总的来讲,如果在controller层做切入,则难监控实际运行情况,在service层做切入,则只能监控到service层的情况,通过捕捉service抛出的异常来记录日志,对于目前本人应用而言,已经足够了,先将记录如下:
代码:
@Component
@Aspect
public class ExceptionLog {
/**
* 61 * 环绕通知需要携带ProceedingJoinPoint类型的参数
* 62 * 环绕通知类似于动态代理的全过程:ProceedingJoinPoint类型的参数可以决定是否执行目标方法。
* 63 * 而且环绕通知必须有返回值,返回值即为目标方法的返回值
* 64
*/
@Around("execution(* *com.test.service..*.*(..))")
public Object aroundMethod(ProceedingJoinPoint pjd) throws Throwable {
Object result = null;
String methodName = "class:" + pjd.getTarget().getClass().getName() + " method:" + pjd.getSignature().getName(); //获取方法名称
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); //获取请求的URL//执行目标方法
try {
//前置通知
result = pjd.proceed();//返回通知
} catch (Throwable e) {
//异常通知
// System.out.println("The method " + methodName + " occurs expection : " + e);throw e; /让spring处理异常
}finally {
//记录日志
}
return result; //必须返回结果,否则controller无法获取service返回的结果(正常情况下)
}
}
spring 配置:
<aop:aspectj-autoproxy/>
web.xml配置(主要是用于获取方便程序获取HttpServletRequest)
<listener> <listener-class> org.springframework.web.context.request.RequestContextListener </listener-class> </listener>
相关文章推荐
- spring aop 5 环绕通知around
- 【转载】【JAVA自然语言处理NLP工具包】
- Struts2-i18n简单配置及使用
- 史上最全最强SpringMVC详细示例
- 使用JMeter测试Java项目
- Java正则表达式
- JavaWeb过滤器
- Java基础:泛型及其擦除性、不可协变性
- Spring配置JNDI及通过JNDI获取DataSource
- JAVA的abstract修饰符 && 接口interface用法 && 抽象类和interface的差别
- Java 数组声明和实例化
- Java的泛型程序设计
- java - io - 分类总结
- java利用反射获取类的属性及类型
- Java悲观锁和乐观锁
- 深入理解java嵌套类和内部类
- MyEclipse从数据库反向生成实体类之Hibernate方式 反向工程
- JAVA中字符串比较equals()和equalsIgnoreCase()的区别
- Java基础知识
- JAVA注解