我试图拦截所有在其包名中包含特定单词的类...如下所示:
@Pointcut("execution(* *..service..*.*(..))")
我要拦截包中的所有类:
com.domain.model.user.service.save(User user);
com.domain.model.user.service.impl.save(XPTO xpto);
com.domain.model.foo.service.HelloWorld.getMessage(Foo foo);
简而言之,我想拦截属于
package *service*
我正努力让这项工作从过去的许多天。
您应该使用如下切入点表达式:
within(your.base.package..service..*)
例如,这将匹配以下类别:
我认为你可以用这样的切入点捕捉到你需要的东西:
before(): execution(* *(..)) &&
(within(*..service..*.*) || within(service..*.*) || within(*..service.*)) {}
内三条包含三种选择:
在(*…service..*.*)
中:“service”位于包名称中的某个位置,但不在开始或结束处在(服务..*.*)
中:“服务”位于包名称的开头(在您的场景中可能不会发生这种情况)in(*…service.*)
:“service”位于包名称的末尾如果您需要捕获serviceFoo的变体,您可以在服务周围添加更多的通配符(我认为):在(*..*service**)
试试这个。也许您必须排除方面类以避免无休止的循环。此示例在包中捕获com... login...*的所有方法
@Aspect
@SuppressAjWarnings({ "adviceDidNotMatch" })
public class AllMethodsAspect {
private static Map<String, Long> beforeTimestamps = new HashMap<>();
@Pointcut("!within(aspects..*)"
+ " && (!execution(* org..* (..)) && !within(org..*) && !call(* org..* (..)) )"
+ " && (!execution(* java..* (..)) && !within(java..*) && !call(* java..* (..)) )"
+ " && (!execution(* javax..* (..)) && !within(javax..*) && !call(* javax..* (..)) )"
+ " && (!execution(* sun..* (..)) && !within(sun..*) && !call(* sun..* (..)) )"
+ " && execution(* com..login..*(..))")
public void methodCall() {
}
@Before("methodCall()")
public void before(JoinPoint joinPoint) {
beforeMethodCall(joinPoint);
}
@AfterReturning(pointcut = "methodCall()", returning = "returnObject")
public void after(JoinPoint joinPoint, Object returnObject) {
afterMethodCall(joinPoint, returnObject);
}
@AfterThrowing(pointcut = "methodCall()", throwing = "throwable")
public void throwing(JoinPoint joinPoint, Throwable throwable) {
afterThrowingMethodCall(joinPoint, throwable);
}
void beforeMethodCall(JoinPoint joinPoint) {
try {
long start = System.currentTimeMillis();
beforeTimestamps.put(joinPoint.toString() + " - " + Thread.currentThread().getName(), Long.valueOf(start));
LOG.info(".before " + joinPoint);
} catch (Exception e) {
LOG.error(".before Exception " + e);
}
}
void afterMethodCall(JoinPoint joinPoint, Object returnObject) {
afterMethodCall(joinPoint, returnObject, 0);
}
void afterMethodCall(JoinPoint joinPoint, Object returnObject, int depth) {
try {
long start = beforeTimestamps.get(joinPoint.toString() + " - " + Thread.currentThread().getName()).longValue();
beforeTimestamps.remove(joinPoint.toString() + " - " + Thread.currentThread().getName());
long duration = System.currentTimeMillis() - start;
Signature signature = joinPoint.getSignature();
if (signature instanceof MethodSignature) {
Class<?> returnType = ((MethodSignature) signature).getReturnType();
LOG.info(".after " + joinPoint + " " + duration + "ms" + (void.class == returnType ? "" : " [" + returnObject + "]"));
} else if (signature instanceof ConstructorSignature) {
LOG.info(".after " + joinPoint + " " + duration + "ms Constructor");
} else if (signature instanceof FieldSignature) {
LOG.info(".after " + joinPoint + " " + duration + "ms Field");
} else {
LOG.info(".after " + joinPoint + " " + duration + "ms unknown");
}
} catch (Exception e) {
LOG.error(".after Exception " + e);
}
}
void afterThrowingMethodCall(JoinPoint joinPoint, Throwable throwable) {
try {
Long startAsLong = beforeTimestamps.get(joinPoint.toString() + " - " + Thread.currentThread().getName());
long start = startAsLong == null ? 0 : startAsLong.longValue();
beforeTimestamps.remove(joinPoint.toString() + " - " + Thread.currentThread().getName());
long duration = System.currentTimeMillis() - start;
LOG.info(".fail " + joinPoint.toString() + " " + duration + " ms - " + throwable.getMessage());
} catch (NullPointerException e) {
LOG.info(".fail NullPointerException " + "unknown - " + throwable.getMessage());
}
}
static final class LOG {
static void info(String loggingData) {
System.err.println(new Date() + " " + loggingData);
}
static void error(String loggingData) {
System.err.println(new Date() + " " + loggingData);
}
}
}
我有一个特定包的工作代码,但我想为所有控制器、服务和dao包配置它,例如 com。abc。xyz。所容纳之物控制器 com。abc。xyz。所容纳之物服务 com。abc。xyz。所容纳之物道 com。abc。xyz。类别控制器 com。abc。xyz。类别服务 com。abc。xyz。类别dao公司 等等这是我的项目的基本包,有人可以帮助我如何去做它,使它适用于我的网络项目,包括控制器的所有类,
问题内容: 有没有类似于Go中的方法的东西,而不必搜索切片中的每个元素? 问题答案: Mostafa已经指出,编写这种方法很简单,而mkb为您提供了使用sort包中的二进制搜索的提示。但是,如果要进行很多此类包含检查,则还可以考虑使用地图。 使用惯用语检查特定的映射键是否存在很简单。由于您对值不感兴趣,因此也可以创建一个例如。在此处使用空值的优点是不需要任何额外的空间,并且Go的内部映射类型针对该
是否有类似于方法,而不必搜索片中的每个元素?
本文向大家介绍python提取包含关键字的整行数据方法,包括了python提取包含关键字的整行数据方法的使用技巧和注意事项,需要的朋友参考一下 问题描述: 如下图所示,有一个近2000行的数据表,需要把其中含有关键字‘颈廓清术,中央组(VI组)'的数据所在行都都给抽取出来,且提取后的表格不能改变原先的顺序。 问题分析: 一开始想用excel的筛选功能,但是发现只提供单列筛选,由于关键词在P,S,V
怎么了?各位! 我正在尝试拦截所有名称中包含特定单词的类...如下所示: 我有以下拦截方法: 我试过:(有效,但看起来很可怕) 谢谢!!!
问题内容: 有没有一种方法可以选择其中一列仅包含,但包含任意数量的预定义值的行? 我一直在使用它,但是它返回的行中我的列至少包含一个值(我知道这正是它应该做的)。 但我正在寻找一种方法,仅选择在关键字列中仅包含我的关键字的行。 关键字示例: 使用上述关键字,我希望返回前两个结果,而不是后两个: 我的专栏包含用逗号分隔的适用于该产品行的所有关键字的列表。 问题答案: 由于您将列表存储为包含逗号分隔列