我有一个切入点,我试图用LTW。我有两个方法,我试图建议,每一个与不同的参数列表。但是,它们都有一个我想要的共同参数。
以下是我想建议的方法签名:
public static WorkflowModifierFlags authenticateUser(String username, String password, String ip, boolean webGUI, boolean realAuthentication)
public static boolean loginJAAS(HttpServletRequest request, HttpServletResponse response, String username, String password, HttpSession session)
@Before("(execution(public static * business.security.service.LoginManagerHelper.authenticateUser(..)) && args( username, ..)) || "
+ "(execution(public static * webapp.util.LoginManagerAction.loginJAAS(..)) && args( *, *, username, ..))" )
public void setUsername(JoinPoint jp, String username) {
// inject the username into the MDC
MDCUtils.setUsername(username);
}
我本来希望args()
参数与execution()方法相关联,但有时会出现“混淆”,给我的是IP而不是用户名。
是我不正确地使用了AspectJ,还是这是LTW中的一个bug?我运行的是AspectJ 1.6.13
AspectJ1.8.9具有相同的行为。一个解决方案/变通方法是,对每个情况使用不同的切入点将建议一分为二,然后委托您想要对用户名执行的逻辑,以避免代码重复。它看起来类似于以下内容:
@Before("execution(public static * business.security.service.LoginManagerHelper.authenticateUser(..)) && args( username, ..)")
public void pointcut1(String username) {
doSomethingWithUsername(username);
}
@Before("execution(public static * webapp.util.LoginManagerAction.loginJAAS(..)) && args( *, *, username, ..)")
public void pointcut2(String username) {
doSomethingWithUsername(username);
}
private void doSomethingWithUsername(String username) {
// inject the username into the MDC
MDCUtils.setUsername(username);
}
我总是使用类似于每个用例的绑定(即最初与)组合的切入点表达式)来根据或-ed切入点拆分建议,因为对于
@annotation()
类型切入点,它会导致一个关于不一致绑定的错误消息。请参阅我关于这些情况的另外两个答案,以及将通用功能提取到单独方法的类似解决方案:答案1和答案2。
我认为AspectJ在您的情况下应该表现出与@annotation()
类型切入点相同的行为,因此我认为编译器不报告错误并执行意外操作是AspectJ编译器本身的一个bug。
我试图围绕使用自定义注释注释的方法定义一个切入点。注释有一个参数,我想在切入点定义中包含一个检查。 这是注释: 如何应用注释的示例: 现在我想有两个切入点定义,根据注释的内容选择这两种方法。 在注释本身上创建切入点相对容易: 这将匹配@MyAnno的每次出现。但是我如何定义两个切入点,一个将与包含的匹配,另一个将与包含的匹配
AspectJ1.6版本
假设我有一个注释,如下所示: 然后在Aspect中,我怎么可能想写两个切入点,一个用于所有用@DB操作(isRead操作=true)注释的方法,一个用于@DB操作(isRead操作=false)?
我想使用ElementType运行一个方面。参数注释,但它不起作用。从不调用about-tokenize方法。
到目前为止,我已经尝试了以下表达式,但没有成功: 有人能给我指出正确的解决办法吗?有可能吗?
问题内容: 如果满足以下条件,则需要创建一个与方法匹配的切入点的方面: 它用MyAnnotationForMethod注释 它的参数之一(可以有多个)用@MyAnnotationForParam注释(但也可以具有其他注释)。 方面类看起来像这样 注释方法 随着日食->警告:在poincut: 使用http://download.eclipse.org/tools/ajdt/35/update中的最