CallMonitoringAspect.java
资源名称:petclinic.rar [点击查看]
上传用户:dezhong
上传日期:2022-08-10
资源大小:167k
文件大小:2k
源码类别:
Java编程
开发平台:
Java
- package org.springframework.samples.petclinic.aspects;
- import org.aspectj.lang.ProceedingJoinPoint;
- import org.aspectj.lang.annotation.Around;
- import org.aspectj.lang.annotation.Aspect;
- import org.springframework.jmx.export.annotation.ManagedAttribute;
- import org.springframework.jmx.export.annotation.ManagedOperation;
- import org.springframework.jmx.export.annotation.ManagedResource;
- import org.springframework.util.StopWatch;
- /**
- * Simple AspectJ aspect that monitors call count and call invocation time.
- * Implements the CallMonitor management interface.
- *
- * @author Rob Harrop
- * @author Juergen Hoeller
- * @since 2.5
- */
- @ManagedResource("petclinic:type=CallMonitor")
- @Aspect
- public class CallMonitoringAspect {
- private boolean isEnabled = true;
- private int callCount = 0;
- private long accumulatedCallTime = 0;
- @ManagedAttribute
- public void setEnabled(boolean enabled) {
- isEnabled = enabled;
- }
- @ManagedAttribute
- public boolean isEnabled() {
- return isEnabled;
- }
- @ManagedOperation
- public void reset() {
- this.callCount = 0;
- this.accumulatedCallTime = 0;
- }
- @ManagedAttribute
- public int getCallCount() {
- return callCount;
- }
- @ManagedAttribute
- public long getCallTime() {
- return (this.callCount > 0 ? this.accumulatedCallTime / this.callCount : 0);
- }
- @Around("within(@org.springframework.stereotype.Service *)")
- public Object invoke(ProceedingJoinPoint joinPoint) throws Throwable {
- if (this.isEnabled) {
- StopWatch sw = new StopWatch(joinPoint.toShortString());
- sw.start("invoke");
- try {
- return joinPoint.proceed();
- }
- finally {
- sw.stop();
- synchronized (this) {
- this.callCount++;
- this.accumulatedCallTime += sw.getTotalTimeMillis();
- }
- }
- }
- else {
- return joinPoint.proceed();
- }
- }
- }