package com.richie.framework.service; 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; @Aspect public class LogExAop { public static int PROCESS_TIME_OUT =12; /** 定义共用方法切入点 */ @Pointcut("execution(public * *(..))") public void inPublicMethod() { } /** 定义数据访问类方法切入点 */ @Pointcut("execution(* com.richie.*.dao.*.*(..))") public void inDAOPackage() { } /** 定义业务处理类方法切入点 */ @Pointcut("execution(* com.richie.*.service.*.*(..))") public void inServicePackage() { } /** web层方法切入点 */ @Pointcut("execution(* com.richie.*.web.*.*(..))") public void inWebPackage() { } /** 所有的public方法(包括web、service) */ @Pointcut("inPublicMethod() && (inDAOPackage()||inServicePackage() ||inWebPackage())") 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("\n==================【") .append(pjp.getTarget().getClass().getName()) .append(".") .append(pjp.getSignature().getName()) .append("】"); long begin = System.currentTimeMillis(); //实际方法执行 Object result = pjp.proceed(); long end = System.currentTimeMillis(); sb.append("花费时间:[").append((end - begin)/1000).append("s]"); log.debug(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); } }
注意点:
1. Spring的配置中引入下列元素来启用Spring对@AspectJ的支持:
<aop:aspectj-autoproxy />
2.LogExAop 要在Spring 作为bean 配置
<bean id="logExe" class="com.richie.framework.service.LogExAop">
</bean>
相关推荐
现在,我们来看如何创建一个简单的Spring AOP例子: 1. **定义切面(Aspect)**:切面是包含通知(Advice)和切入点(Pointcut)的类。通知定义了要执行的逻辑,切入点定义了何时执行。例如,我们可以创建一个名为`...
Spring 2.5 AOP(面向切面编程)...综上所述,Spring 2.5 AOP例子展示了如何利用类扫描和XML配置实现面向切面编程。通过理解这些概念和实践,我们可以更高效地管理和维护我们的应用程序,使其更具可扩展性和可维护性。
通过这个例子,你可以学习到如何在Spring.NET环境中实现AOP,理解动态代理的工作原理,并掌握如何在实际项目中应用AOP来提高代码的灵活性和可维护性。这将有助于你编写更加模块化、易于维护的软件系统。
在Spring AOP的例子中,我们可能会创建一个`@RunWith(SpringJUnit4ClassRunner.class)`标记的测试类,以利用Spring的测试支持。在测试方法中,可以注入需要的bean,然后调用方法来触发AOP代理。这样,通知将在适当的...
这个简单例子将帮助我们理解AOP的基本概念和如何在Spring框架中实现它。 首先,我们要知道AOP的核心概念:切面、通知、连接点、切点、目标对象和代理。切面是包含横切关注点(如日志记录、事务管理等)的模块化组件...
下面是一个简单的Spring MVC中AOP的例子,分为配置和实现两部分。 ### 配置 1. 在`spring-common.xml`配置文件中,我们需要引入AOP相关的命名空间,并声明一个`<aop:aspectj-autoproxy>`元素。这会告诉Spring容器...
在"spring aop例子"中,我们可以看到`src`目录,这个通常包含Java源代码,其中可能包含了切面类、通知方法以及使用了切面的业务逻辑类。`extjstest`可能是测试目录,用于验证AOP配置和功能是否正确工作。`QQ五笔截图...
Spring Boot AOP(面向切面编程)是一种强大的设计模式,它允许我们在不修改现有代码的情况下,插入额外的功能或监控代码。在Spring框架中,AOP主要用于日志记录、事务管理、性能统计等场景。本示例是关于如何在...
Spring AOP,全称Aspect-Oriented Programming(面向切面编程),是Spring框架的重要组成部分,它为应用程序提供了声明式的...通过理解并实践Spring AOP的例子,你可以更好地掌握这一强大的功能,并在实际项目中应用。
3. **配置文件(XML或Java配置)**:在Spring的XML配置中,我们需要使用`<aop:config>` 和 `<aop:aspect>` 标签来声明切面,并通过`<aop:pointcut>` 定义切入点。对于注解驱动的AOP,我们可以使用`@Aspect` 注解标记...
在这个"SpringAOP的例子"中,我们将深入探讨如何在Eclipse环境下利用Spring AOP和动态代理来实现这些功能。 首先,让我们理解什么是AOP。AOP是一种编程范式,旨在减少代码的重复性和增强可维护性。在传统的OOP中,...
**Spring AOP 注解例子详解** 在 Spring 框架中,面向切面编程(Aspect Oriented Programming,AOP)是一种强大的设计模式,它允许我们分离关注点,将业务逻辑与系统服务(如日志、事务管理等)解耦。在 Spring AOP...
下面是一个简单的AOP例子,创建一个记录方法执行时间的通知: ```java @Aspect public class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") public void logBefore(JoinPoint joinPoint)...
现在,我们来看一个简单的Spring AOP例子: 首先,我们需要定义一个切面,包含一个通知。例如,我们创建一个名为`LoggingAspect`的类,其中有一个`logExecutionTime`方法作为前置通知,记录方法的执行时间: ```...
《深入解析Spring AOP框架——以spring-aop.jar为例》 Spring AOP,全称Aspect Oriented Programming(面向切面编程),是Spring框架的核心部分之一,它为Java开发者提供了强大的面向切面的编程能力。本文将围绕...
在这个经典例子中,我们将深入理解Spring AOP的核心概念,并通过实际操作来加深印象。 首先,AOP的核心是切面(Aspect),它封装了横切关注点,如日志记录、事务管理等。在Spring AOP中,切面通常由一个或多个通知...
在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点分离,将横切关注点(如日志、事务管理、权限检查等)与核心业务逻辑解耦。AOP的核心概念是切面、通知、连接点、切入点和织入。在...
- "spring-aop-2"可能是一个更复杂的例子,涉及到事务管理,通过环绕通知实现数据库操作的事务控制。 通过这个实例工程,学习者可以直观地理解Spring AOP的工作原理,如何定义切面、配置通知以及如何在实际项目中...
这个"springAOP演示例子"很可能会包含一个简单的Spring项目,展示如何创建和配置切面,定义切入点和通知,并观察其在实际代码中的工作原理。通过深入理解和实践这个例子,你可以更好地掌握Spring AOP的使用,提升你...
在`SpringAOP`目录中,可能包含了定义切面、通知(advice)、切入点(pointcut)等内容。AOP的实现通常通过定义切面类,其中包含通知方法,并通过切入点表达式确定这些通知在何时何地执行。这使得代码更加模块化,...