我在AspectJ实现方面遇到了一些问题!
我想为带有@myAnnotation注释的方法创建一个日志方法。
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation{ }
@Aspect
public class MyAspect {
private static Logger logger = Logger.getLogger(MyAspect.class.getName());
@Pointcut("@annotation(com.utils.aop.annotations.MyAnnotation)")
public void logMyAspect() {
}
@Before("logMyAspect()")
public void logMethod(JoinPoint jp) {
String methodName = jp.getSignature().getName();
logger.info("Executing method: " + methodName);
}
}
@RolesAllowed({ "DEV", "GUI", "API" })
@POST
@Path("/getList")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@MyAnnotation
public Response getList(@Context final ContainerRequestContext requestContext,
FilterAndSortObject filterAndSortObject,
@QueryParam("offset") final int offset,
@QueryParam("limit") final int limit)
{
...
}
@Configuration
@EnableAspectJAutoProxy
public class ServletContextClass implements ServletContextListener {
final static Logger logger = Logger.getLogger(ServletContextClass.class);
@Override
public void contextInitialized(final ServletContextEvent sce) {
...
}
...
}
然而,这似乎不起作用。它没有记录任何东西!
我在logmethod(JoinPoint jp)
中使用了断点来检查结果,但没有成功!
有人知道为什么这行不通吗?
您不必分离切入点和处理程序方法;事实上,我肯定这就是你问题的原因。以下方面应该可以很好地工作:
@Aspect
public class MyAspect {
private static Logger logger = Logger.getLogger(MyAspect.class.getName());
@Before("@annotation(com.utils.aop.annotations.MyAnnotation)")
public void logMyAspect(JoinPoint jp) {
String methodName = jp.getSignature().getName();
logger.info("Executing method: " + methodName);
}
}
您还可以检查注释值,以防它需要参数:
@Before("@annotation(a)")
public void logMyAspect(JoinPoint jp, MyAnnotation a) {
// conditional logging based on annotation contents
}
我试图在方法注释上创建一个Aeyj切入点,但我总是用不同的方法失败。我使用的是aspectj自动代理(我在Spring上下文中没有配置其他编织)。我的类如下所示: 所以我想知道为什么aspectj不会创建切入点。我设法使用执行(**(…)使其工作抛出一些exc)这对我来说很好,但我仍然想知道我做错了什么。 另外,由于是在接口中定义的,我指定了实现类的注释,有没有办法让它以这种方式工作?其他代理机制
我不能用“”运算符和多个注释来做切入点。我试图为一些JBehave注释创建一个切入点(@givid、@then、@when)。 为这三个注释创建切入点的语法是什么?因为我在其他切入点中使用了逻辑OR运算符,所以我假设它类似于: 但是它不起作用,我得到一个不一致的绑定异常。我尝试了其他组合,但找不到一个这样做的诀窍。
问题内容: 我有一个简单的问题。我已经看到了两种方式的示例。问题是-“为什么不能在字段上放置注释?”。让我举一个例子.... 上面的代码很好用(假设那里没有错字)。当将注释放在属性的getter上时,一切就完美了。 但是,这对我来说似乎很尴尬。在我看来,将注解放在字段上比较干净,就像这样- 我已经看到了两种方式的示例。但是,当我运行第二个示例时,我得到以下信息… 这是(标有第25行)… 的骨架。
问题内容: 我有一个简单的问题。我已经看过两种方式的例子。问题是-“为什么不能在字段上放置注释?”。让我举一个例子.... 上面的代码可以正常工作(假设那里没有错字)。当将注释放在属性的getter上时,一切就完美了。 但是,这对我来说似乎很尴尬。在我看来,将注解放在字段上比较干净,就像这样- 我已经看到了两种方式的示例。但是,当我运行第二个示例时,我得到以下信息… 这是(标有第25行)… 的骨架
我写我自己的CMS与教义2.5.4和纯PHP 5。 这是我的CMS(谷歌链接)。 在构建过程中,我反驳了这个错误: 错误NewsDAO:异常“条令\ORM\Mapping\MappingException”和消息“Class”News不是有效的实体或映射的超类。'in/var/www/html/xxxxx.com/public_html/vendor/doctor/orm/lib/doctor/o
考虑以下基本的Foo、Bar和Main类: 运行Main打印“20个随机AspectJ字节”。我想取代执行吧。从Foo调用时的GenerateRadom。随机你好。这可以通过以下方面实现: 这可以工作,Main现在打印“7个随机AspectJ字节”。 如何使用注释表达相同的方面?这是我的尝试: 这不起作用,我收到以下编译器警告: 我已经验证了p\u randomHello和p\u Generato