我创建了一个方面,用于在某些方法执行之前拦截它们,使用AspectJ如下所示
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class SomeAspect {
@Before("@annotation(com.test.package.MyCustomAnnotation)")
public void validateSearchRestriction(final JoinPoint jp,
final MyCustomAnnotation annotation) {
final String useCase = annotation.useCase();
}
}
编写的自定义注释如下所示
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.stereotype.Component;
@Component
@Target(value = { ElementType.METHOD, ElementType.TYPE })
@Retention(value = RetentionPolicy.RUNTIME)
public @interface SecurityRestricted {
String useCase();
}
我面临的问题是我的方法中的第二个论点。如果我试图在我的方面中获得注释作为第二个参数,应用程序将以下面的错误开始失败。
由:java.lang.IllegalArgumentException引起:错误::0在org.aspectj.weaver.tools.pointCutParser.ParsePointCutExpression(PointCutParser.java:301)~[AspectJweaver-1.8.0.jar:1.8.0]
如果我删除第二个参数,我的应用程序启动良好。这是获得方法注释的正确方法吗?
如果要将变量从一个切入点绑定到一个方法,则需要引用该切入点中的变量。因此,与其编写@annotation(your.customannotation)
,不如编写@annotation(method-argument-name)
。
所以在您的例子中,您的切入点看起来像
@Before(“@annotation(annotation)”)
public void validateSearchRestriction(JoinPoint jp, MyCustomAnnotation annotation) { ... }
我在MyController类下有一个函数: 我在我的项目中设置了AspectJ,以便在这两个addPerson(…)时运行AOP逻辑上述方法称为: 我的问题在上述代码注释中提到。我想知道如何访问AOP函数中用RequestBody注释的参数?我不想检查参数类型或名称,但想知道如何通过检查注释来访问参数。有可能吗?
问题内容: 是否可以通过注释处理器访问带有注释的元素? 是否可以通过注释处理器访问带注释的类型边界? 高度赞赏我错过的相关文档的链接。 内容: 注释: 一个示例类: 处理器: 在classpath 上使用编译以上内容将显示消息,但永远不会调用该方法。当方法参数中存在注释时,使用注释向处理器添加另一个注释可以正常工作。如果方法参数带有注释,则过程将再次忽略该元素。 问题答案: 该注释是有点棘手,因为
本文向大家介绍Android中通知Notification的使用方法,包括了Android中通知Notification的使用方法的使用技巧和注意事项,需要的朋友参考一下 每个使用Android手机的人应该对Android中的通知不陌生,下面我们就学习一下怎么使用Android中的通知。 一、通知的基本用法 活动、广播接收器和服务中都可以创建通知,由于我们一般在程序进入后台后才使用通知,所以真实场
问题内容: 如何编写适用于方法执行的AspectJ切入点,该方法执行会使用注释覆盖接口方法?例如: 仅当带有注释本身时,切入点才匹配。还有另一种方法吗? 问题答案: 正如Nicholas指出的那样,这在AspectJ中是不可能的。这是无法实现的更多证据(摘自http://www.eclipse.org/aspectj/doc/released/adk15notebook/annotations-
问题内容: 人们经常会问诸如此类的AspectJ问题,因此我想在一个我以后可以轻松链接的地方回答它。 我有这个标记注释: 现在,我注释这样的接口和/或方法: 这是一个小的驱动程序应用程序,它也实现了该接口: 现在,当我定义此方面时,我希望它会被触发 为每个构造函数执行带注释的类,并 每次执行带注释的方法。 不幸的是,方面没有打印任何内容,就像类Application和方法two()没有任何@Mar
问题内容: 按照javadoc的通知,唤醒正在此对象的监视器上等待的单个线程。如果有任何线程在此对象上等待,则选择其中一个唤醒。选择是任意的,并且可以根据实现情况进行选择。线程通过调用其中一个wait方法在对象的监视器上等待。 我想知道如何通过通知实现此行为。我在许多站点上都读到它发出信号,但是信号在这里意味着什么? notify是直接向第一个等待线程发送信号还是向线程调度程序发送信号? 问题答案