大众点评Cat接入(一) 注解接入

本文介绍如何通过定义自定义注解CatAnnotation并利用AspectJ实现方法级别的性能监控。文章详细展示了CatAnnotation的定义及如何在切面类CatAop中使用它来对指定方法进行监控。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注解定义

注解定义为CatAnnotation,代码如下:

import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

@Retention(RUNTIME)
@Target(ElementType.METHOD)
public @interface CatAnnotation {
}

切面使用注解

切面使用注解,类CatAop,代码如下:

import java.lang.reflect.Method;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;

import com.dianping.cat.Cat;
import com.dianping.cat.message.Transaction;
import com.niwodai.inf.cat.dubbo.DubboCat;

@Aspect
public class CatAop {

	@Around(value = "execution(* com.niwodai..*.*(..))")
	public Object aroundMethod(ProceedingJoinPoint pjp) {
	    Object o = null;
	    //开关未打开,则直接跳过
	    if(!DubboCat.isAOPEnable()){
	        try{
	            o = pjp.proceed();
	        }catch(Throwable e){
	            
	        }
	        return o;
	    }
	    
		MethodSignature joinPointObject = (MethodSignature) pjp.getSignature();
		Method method = joinPointObject.getMethod();
		boolean flag = method.isAnnotationPresent(CatAnnotation.class);
		if (flag) {
			Transaction t = Cat.newTransaction("method", method.getName());
			
			try {
			    //继续执行方法
				o = pjp.proceed();

				t.setStatus(Transaction.SUCCESS);
				t.complete();
			} catch (Throwable e) {
				t.setStatus(e);
				Cat.logError(e);
			} finally {
				t.complete();
			}
		} else {
			try {
				o = pjp.proceed();
			} catch (Throwable e) {
			    
			}
		}
		return o;
	}

}

基本思路: 先判断aop监控是否打开,如果没有打开,直接发起调用;如果打开了,则在调用前后封装Cat监控。这里需要注意点aop路径,结合自己项目更改aop监控路径。

转载于:https://my.oschina.net/liangxiao/blog/1587499

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值