Tag: aspectj

AspectJ:两种教程

根据我的研究,我知道使用AspectJ有两种方法。 首先是创建A.aj类,然后在A.java添加注释@Aspect 。 我正在为第二类寻找一个好的教程,特别是关于像 @After(“call(void fooMethod())”) @Around(“call(void sendAndReceive())”) @Before(“execution(String greeting(..)) && args(context)”) 但我不知道他们是怎么称呼的。 你能推荐一些教程吗?

如何使用AspectJ拦截处理自身exception的方法

我正在尝试在发生某些特定exception时添加一些监控。 例如,如果我有这样的方面: @Aspect public class LogAspect { @AfterThrowing(value = “execution(* *(..))”, throwing = “e”) public void log(JoinPoint joinPoint, Throwable e){ System.out.println(“Some logging stuff”); } } 和测试类: public class Example { public void divideByZeroWithCatch(){ try{ int a = 5/0; } catch (ArithmeticException e){ System.out.println(“Can not divide by zero”); } } public void divideByZeroWithNoCatch(){ int b = […]

具有多个注释的方法的AspectJ切入点

使用加载时编织,纯AspectJ。 我们有2个@Count和@Count注释,以及一些带注释的方法。 @Time (name=”myMethod1Time”) @Count (name=”myMethod1Count”) public void myMethod1(){..}; @Time (name=”myMethod2Time”) public void myMethod2(){..}; @Count (name=”myMethod3Count”) public void myMethod3(){..}; 现在我为myMethod1定义了我自己的方面, myMethod1有多个注释: // multiple annotations, not working @Around(“@annotation(time) && @annotation(count)) public Object myAspect(Time time, Count count) {..} 这不起作用。 但是,捕获方法myMethod2可以使用单个注释正常工作: // single annotation, is working @Around(“@annotation(time)) public Object myAnotherAspect(Time time) {..} 我想只捕获签名中存在Time和Count注释的方法,我想使用注释值。 谁知道如何实现这一目标?

AspectJ构造函数强制工厂模式

我想将对象返回从调用更改为constuctor 从 public class A { public A(){ } public String sayHello() { return “hello”; } public String foo() { return “foo”; } } 至 public class AWrapped extends A { private A wrapped; public AWrapped() { super(); } public AWrapped(A pWrapped) { wrapped=pWrapped; } public String foo() { return wrapped.foo(); } public String sayHello […]

APT和AOP在同一个项目中,使用Maven

我必须在同一个Maven项目中使用Annotation Processing(apt)和AspectJ。 两者都适合自己,但我需要根据apt创建的代码创建方面。 所以我需要二进制编织(原始源文件由apt扩展)。 如何在maven项目中启用二进制编织? 我知道唯一的标准选项是使用weaveDependencies参数提供依赖项 ,但这很糟糕。 还有别的办法吗? 好吧,我可以使用Maven Antrun插件嵌入AspectJ ant任务 ,但我不想诉诸于此 。

如果没有-javaagent vm选项,Spring AspectJ编织如何工作?

我知道Spring避免使用-javaagent vm选项以使其AspectJ加载时间编织工作,而是依赖于类加载器来启动代理。 我认为Java规范规定使用Java代理的唯一方法是通过-javaagent vm选项。 我错了吗? 有人可以指示我使用官方的Java规范/文档来澄清我的审讯吗?

@Around @Aspect在同一个包中仅适用于@DependsOn

请参阅以下更新。 我有一个Spring Boot应用程序,我接受TCP / IP连接: public MyClass implements InitializingBean { @Override public void afterPropertiesSet() throws Exception { try (ServerSocket serverSocket = new ServerSocket(port)) { while (true) { Socket socket = serverSocket.accept(); new ServerThread(socket).start(); } } } … private class ServerThread extends Thread { @Override public void run() { try (InputStream input = socket.getInputStream(); OutputStream output […]

@AspectJ使用Annotation作为方法参数的类级别注释建议

如何将注释作为为类级别注释定义的建议的参数传递? 可能吗? 从这里的post我能够获得标识所有类中由特定注释标记的公共方法的切入点。 我也可以获得建议。 但是,在上面的例子中,我不知道如何将注释变量作为参数传递。 对于方法级注释,我能够获得切入点和建议,我可以将注释作为参数传递,但我不知道如何为类级注释实现相同的注释。 下面的代码有效,但是我需要将注释作为下面程序中“ LogExecutionTimeByClass ”建议的参数,我无法获得相应的建议或切入点。 注解: import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface LogExecutionTime { String level(); } 方面: import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; @Aspect public class LogTimeAspect { /* * Pointcut to match all the public methods. */ @Pointcut(“execution(public * *(..))”) […]

如何覆盖存放在ant lib目录中的ant任务

在我的工作中,我们在一些Java项目中使用AspectJ。 为了使这与ant构建一起使用,我们一直将aspectjtools.jar放在ant / lib /中。 我现在正在研究一个特定的Java项目,需要使用更新版本的aspectJ。 我不想让所有使用该项目的人更新其aspectjtools.jar的本地副本。 相反,我尝试将较新的aspectjtools.jar添加到项目的lib目录中,并将以下行添加到build.xml。 但是,这并不像我希望的那样,因为ANT类加载器从ant / lib /优先加载到我在taskdef类路径中指定的jar的jar。 有没有办法强迫ant选择检查我项目的jar?

Spring – slf4J:如何自动记录错误和exception?

我们正在使用带有slf4j和hibernate的Spring,我正试图找出一种自动记录exception和错误的方法(即不在每个类中启动调试器的实例),这样它就可以捕获任何抛出的错误或exception,并且在日志中获取类和方法名称, 我读了一篇关于使用方面和拦截器的简短说明,所以你能否为我提供一些实现这个的详细方法, 问候,