1. 需求背景
性能调优阶段,需要找出执行时间比较长的方法,针对这些方法进行调优。
2. 可行方案
一种是传统的在每个方法前后获取System.currentMis(),然后得到方法的执行时间。
这种方式的缺点是方法多会写很多耦合代码,而且不可重用,测试完需要删掉。
另一种使用AOP监控方法的前后点,监控方法的执行时间,比较优雅且无侵入。
可行的方案之一是使用 Around Advice, 环绕通知可在方法执行前后做一些操作。
AOP,面向切面编程,Aspect Oriented Programming, 可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。
3. AOP
jar librarys requires:
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.5.4</version> </dependency> <dependency> <groupId>cglib</groupId> <artifactId>cglib-nodep</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.3.6</version> </dependency>
Spring配置:
<aop:aspectj-autoproxy proxy-target-class="true"/>
AOP实现类:
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component; import org.springframework.util.StopWatch; /** * Created by jzq1999 on 2017/4/19. * 通过aop拦截后执行具体操作 */ @Aspect @Component public class DaoTimeInterceptor { private final static String POINT = "execution (* com.tzx.*.po.springjdbc.dao.imp.*.*(..))"; @Pointcut(POINT) public void recordLog(){} @Around("recordLog()") public Object around(ProceedingJoinPoint pjp) throws Throwable{ StopWatch stopWatch = new StopWatch(); stopWatch.start(); Object obj = pjp.proceed(pjp.getArgs()); stopWatch.stop(); long cost = stopWatch.getTotalTimeMillis(); if(cost > 10) { MethodSignature signature = (MethodSignature) pjp.getSignature(); String methodName = signature.getDeclaringTypeName() + "." + signature.getName(); System.out.println("----------- 执行" + methodName + "方法, 用时: " + cost + "ms -----------"); } return obj; } }
相关推荐
在Spring Boot应用中,我们可以利用AOP(面向切面编程)来实现方法执行时间的统计。AOP是一种编程范式,允许我们定义横切关注点,例如日志、事务管理或性能监控,然后将这些关注点与核心业务逻辑分离。在本场景下,...
在本文中,我们将深入探讨如何使用Spring AOP(面向切面编程)来记录方法的执行时间,以便评估和优化方法的性能。AOP允许我们在不修改原有代码的情况下,添加额外的功能,如日志记录、安全性检查或性能监控。 首先...
本文将深入探讨如何在Java中实现方法执行时间的统计,并提供相关实践技巧。 首先,我们可以使用Java内置的`System.currentTimeMillis()`或`nanoTime()`方法来获取当前时间点,以此作为计时起点。在方法执行完毕后,...
- **性能监控**:统计方法的执行时间,用于性能优化。 - **安全控制**:权限检查,防止非法访问。 - **缓存管理**:在方法调用前检查缓存,避免不必要的数据库查询。 ### 5. 示例项目`SpringAopPrj`分析 这个...
- 性能监控:统计方法的执行时间和调用次数。 7. **实战演练** 创建一个简单的Spring AOP应用,首先定义一个切面类,包含切点和通知,然后在Spring配置文件中启用AOP并注册切面,最后编写测试类验证AOP功能是否...
- 性能监控:统计方法执行时间,用于性能分析。 6. 配置AOP代理: 在Spring配置文件中,可以通过<aop:config>元素和<aop:aspect>元素来声明切面和通知。也可以使用注解式AOP,通过在切面类上使用@Aspect,在方法...
3. 性能监控:统计方法的执行时间,用于性能分析。 4. 安全控制:在方法调用前检查权限。 总结起来,"spring-aop-jar"涉及了Spring框架中的面向切面编程模块,包括Spring AOP和AspectJ的集成。通过理解和熟练使用...
- **性能监控**:在关键方法周围插入代码来统计执行时间。 - **权限控制**:检查用户是否有执行某操作的权限。 总结,SSH笔记-AOP涵盖了Spring中AOP的核心概念,包括动态代理技术的使用、基于注解的AOP配置以及...
- 性能监控:统计方法执行时间,分析系统性能瓶颈。 5. AOP的优势与挑战: - 优势:提高代码复用,降低维护成本,使代码结构更加清晰。 - 挑战:可能会增加系统的复杂性,学习曲线较陡峭,过度使用可能导致设计...
在实际开发中,AOP还能用于更复杂的场景,比如事务管理、权限控制、性能统计等。通过这个Demo,开发者可以学习到如何在Android项目中有效地应用AOP,提高代码的组织结构和可维护性,同时解决特定问题,如防抖动的...
- 性能监控:记录方法的执行时间,分析性能瓶颈。 - 权限验证:在方法调用前检查用户权限。 6. **AOP与其他组件的结合**: Spring AOP可以与Spring MVC、Spring Data等其他组件无缝集成,提供统一的事务管理和...
- **性能监控**:可以统计方法执行时间,帮助分析性能瓶颈。 - **权限校验**:在方法调用前进行权限验证,避免在每个业务方法中重复代码。 **6. Struts与Hibernate的整合** Struts作为MVC框架负责处理用户请求,...
- **性能监控**:可以定义切面来统计方法的执行时间和资源消耗,用于性能优化。 《深入Spring 2:轻量级J2EE开发框架原理与实践》第五章详细介绍了AOP的概念、实现机制以及在Spring中的具体应用,对于理解和使用...
4. 性能监控:统计方法的执行时间,用于性能优化。 六、Spring AOP与AspectJ的比较 Spring AOP提供了简单的切面编程功能,适用于大部分场景。但当需求更复杂,如需要对静态方法、构造器或字段进行拦截时,AspectJ...
3. **性能监控**:统计方法的执行时间,分析系统的性能瓶颈。 4. **权限控制**:在方法调用前进行权限校验,确保只有授权用户才能访问特定资源。 5. **缓存管理**:在方法调用前后,实现数据的缓存操作,提高系统...
2. **性能监控**:可以统计方法的执行时间,用于性能分析和优化。 3. **事务管理**:Spring的声明式事务管理基于AOP,可以自动处理事务的开始、提交、回滚等操作。 4. **安全性**:在敏感操作前进行权限检查,确保...
- **性能监控**:统计方法执行的时间。 - **权限控制**:在访问资源前进行权限检查。 - **异常处理**:统一捕获和处理异常。 5. **Spring AOP与AspectJ的区别** - Spring AOP是基于代理的,只支持方法级别的...
通过定义一个切面(Aspect),可以在特定的方法执行前后插入自定义代码,例如在文件上传或下载前后记录操作信息。Spring框架提供了强大的AOP支持,可以方便地定义切入点(Pointcut)和通知(Advice)。 4. **操作...
- **性能监控**:统计方法执行时间,优化性能瓶颈。 - **安全性**:控制方法访问权限,防止非法访问。 - **缓存**:在方法调用前检查缓存,避免重复计算。 **5. 结论** Castle AOP为.NET开发者提供了强大的AOP支持...
// 计算并记录方法执行时间 System.out.println("方法执行耗时:" + (end - start) + "ms"); } } } ``` 在这个例子中,`Aop`类定义了一个切点表达式`execution(* com.incon.project.zkb.qxgl.qxbmxxxg.service....