java 枚举使用举例

关于枚举的用法, 备忘一下.

public enum MonitorKey {
query(A.class, "query"),
update(A.class, "update"),
...
;

Class<?> targetClazz;
String targetMehtodName;

MonitorKey() {
}

MonitorKey(Class<?> clazz, String methodName) {
this.targetClazz = clazz;
this.targetMehtodName = methodName;
}

/**
*忽略不需要埋点的调用
*
* @param invocation
* @return
*/
public boolean ignored(MethodInvocation invocation) {
Method method = invocation.getMethod();
String className = method.getDeclaringClass().getName();
return !className.equals(targetClazz.getName()) || !method.getName().equals(targetMehtodName);
}

}


在MonitorUtils中:

public static void addSuccess(MethodInvocation invocation, MonitorKey key, long duration) {
if (key.ignored(invocation)) {
return;
}

...
}
public static void addFailure(MethodInvocation invocation, MonitorKey key, long duration) {
if (key.ignored(invocation)) {
return;
}

...
}


在使用到MonitorUtils的MonitorInterceptor

public void doSuccess(MethodInvocation invocation, long duration) {
MonitorUtils.addSuccess(invocation, MonitorKey.update, duration);

}

public void doFailure(MethodInvocation invocation, long duration, Throwable e) {
MonitorUtils.addFailure(invocation, MonitorKey.update, duration);
}


这里使用枚举不是为了简单的定义一个常量, 而是将原来包含在Interceptor中的判断逻辑(在doSuccess, doFailure中均要使用相同的判断逻辑)放到枚举类型MonitorKey中, 可以将这里的枚举理解为状态模式的一种应用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值