applicationContex.xml需要加入:
<!-- 使用注解定义切面 -->
<aop:aspectj-autoproxy proxy-target-class="true" />
import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
/**
* LOG切面类
* 主要记录Log日志
*/
@Aspect
public class LogAOP
{
/** 定义共用方法切入点
*/
@Pointcut("execution(public * *(..))")
public void inPublicMethod()
{
}
/** 定义数据访问类方法切入点
*/
@Pointcut("execution(* com.huawei.support.*.dao.*.*(..))")
public void inDAOPackage()
{
}
/** 定义业务处理类方法切入点
*/
@Pointcut("execution(* com.huawei.support.*.service.*.*(..))")
public void inServicePackage()
{
}
/** 定义对外服务类方法切入点
*/
@Pointcut("execution(* com.huawei.support.*.ws.*.*(..))")
public void inWebServicePackage()
{
}
/** 定义总切入点
*/
@Pointcut("inPublicMethod() && (inDAOPackage() || inServicePackage() ||inWebServicePackage())")
public void supportAOP()
{
}
/** 切入点执行范围
* @param pjp 切入点
* @throws Throwable 切入点抛出的异常
*/
@Around("supportAOP()")
public Object doAround(ProceedingJoinPoint pjp) throws Throwable
{
Logger log = Logger.getLogger(pjp.getTarget().getClass());
StringBuilder sb = new StringBuilder();
sb.append("[")
.append(pjp.getTarget().getClass().getName())
.append(".")
.append(pjp.getSignature().getName())
.append("]");
long begin = System.currentTimeMillis();
sb.append("开始时间:[").append(DateUtil.format(begin,
DateUtil.DATE_PATTERN2)).append("]");
//实际方法执行
Object result = pjp.proceed();
long end = System.currentTimeMillis();
sb.append("结束时间:[")
.append(DateUtil.format(end, DateUtil.DATE_PATTERN2))
.append("]");
sb.append("共耗费:[").append((end - begin)).append("ms]");
log.info(sb.toString());
return result;
}
/** 切入点抛出异常
* @param jp 切入点
* @param ex 抛出的异常
*/
@AfterThrowing(pointcut = "supportAOP()", throwing = "ex")
public void doThrowing(JoinPoint jp, Throwable ex)
{
Logger log = Logger.getLogger(jp.getTarget().getClass());
log.error(ex.getMessage(), ex);
}
}
分享到:
相关推荐
在这个“Spring AOP 1.0示例”中,我们重点关注如何在实际项目中应用这一特性。 首先,我们需要了解AOP的基本概念。AOP的核心思想是将那些影响多个类的公共行为(如日志记录)抽取出来,形成独立的模块,称为切面...
本示例DEMO "Spring的AOP示例DEMO HELLOWORLD" 将引导我们深入理解Spring AOP的核心概念,并通过一个简单的 HelloWorld 示例来展示其实现过程。 首先,面向切面编程(AOP)是一种编程范式,旨在提高代码的可维护性...
在本示例中,我们将深入探讨Spring框架2.5.6版本中的面向切面编程(AOP)概念。Spring AOP是Spring框架的核心组件之一,它允许开发者在不修改源代码的情况下,对程序进行横切关注点(如日志、事务管理、性能监控等)...
`SpringAop.ppt`文件很可能包含了一个详细的讲解,涵盖了Spring AOP的基本概念、配置方式、使用注解声明切面、基于XML的配置以及如何自定义切面。PPT通常会通过图表、代码示例和流程图来帮助理解复杂的概念,使得...
在这个"spring aop API示例"中,我们将深入探讨如何利用Spring AOP的四种通知类型:Before、After、AfterThrowing和Around,以及它们在实际开发中的应用。 1. **Before通知**: 在方法执行前触发,可以用来执行...
本示例将深入探讨Spring AOP的基础知识,以及如何在实际应用中使用它。 首先,我们来看"LogProfilter.java",这很可能是实现一个日志拦截器的类。在Spring AOP中,这样的类通常被称为切面(Aspect)。切面是封装了...
本示例是关于如何在Spring Boot项目中实现AOP功能的一个简单演示。 首先,我们需要了解AOP的基本概念。AOP的核心是切面(Aspect),它封装了跨越多个对象的行为或关注点,如日志记录。切点(Pointcut)定义了在何处...
Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许开发者在不修改源代码的情况下,通过插入切面来增强或改变程序的行为。在本教程中,我们将深入探讨Spring AOP的不同使用方法,包括定义切点、通知类型...
Spring IOC AOP学习示例代码,包含Spring常用操作示例和所有所需jar文件。参考博客:http://blog.csdn.net/daijin888888/article/details/51735291
Spring AOP,全称Aspect-Oriented Programming(面向切面编程),是Spring框架的一个重要组成部分。它提供了一种模块化和声明式的方式来处理系统中的交叉关注点,如日志、性能监控、安全性、事务管理等。通过AOP,...
以下是一个简单的Spring AOP使用示例: ```java @Aspect public class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") public void logBefore(JoinPoint joinPoint) { // 日志记录代码 ...
- "spring-aop-1"可能是一个基础的AOP示例,演示了如何定义一个切面,包含前置通知、后置通知等,用于日志记录。 - "spring-aop-2"可能是一个更复杂的例子,涉及到事务管理,通过环绕通知实现数据库操作的事务控制。...
在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点分离,将横切关注点(如日志、事务管理、权限检查等)与核心业务逻辑解耦。AOP的核心概念是切面、通知、连接点、切入点和织入。在...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种强大的方式来实现横切关注点,如日志、事务管理、性能监控等,而无需侵入业务代码。下面将详细介绍Spring AOP的注解方式和XML配置方式。 ### ...
学习这个示例,你可以看到如何在实际项目中配置和使用Spring的IOC和AOP,进一步理解它们如何帮助简化代码并提高代码质量。对于初学者来说,这是一个很好的起点,可以帮助他们掌握Spring的核心特性,并应用于实际开发...
在本示例中,我们将深入探讨Spring.NET AOP如何实现动态代理,以及如何利用它来增强应用程序的可维护性和可扩展性。 动态代理是AOP的核心概念,它能够在运行时动态创建代理对象,这个代理对象会拦截目标对象的方法...
Spring AOP,全称Aspect-...在提供的压缩包文件"aop"中,可能包含了示例代码,用于演示上述配置和使用过程。学习者可以通过阅读和运行这些代码来加深对Spring AOP的理解,进一步掌握如何在实际项目中应用面向切面编程。
在本示例中,"Spring示例_Printer_Spring_AOP_Spring_Proxy" 主要关注的是Spring框架中的核心概念,特别是AOP(面向切面编程)和代理模式的应用。让我们深入探讨这些知识点。 首先,Spring框架是Java开发中最常用的...
### Spring之AOP介绍 #### 一、AOP概述 面向方面编程(Aspect-Oriented Programming,简称AOP)作为一...通过上面的介绍和示例,我们可以看到Spring AOP的强大之处,以及它是如何简化开发过程中对横切关注点的处理。
**三、Spring注解AOP示例** ```java @Aspect @Component public class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") public void logBefore(JoinPoint joinPoint) { // 执行日志记录 ...