有什么要添加到 java buildpath 以便在 运行 项目时编织方面吗?
Is there anything to add to java buildpath so that aspects be weaved when running the project?
我的项目中有一个 class MakeRedAspect,它使我的消息变成红色:
import java.awt.Color;
import javax.swing.JLabel;
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 MakeRedAspect {
@Pointcut("execution(static javax.swing.JLabel[] createMultiLabel(..))")
public void multilabelCreation() {}
@Around("multilabelCreation()")
public JLabel[] changeLabelColours(ProceedingJoinPoint thisJoinPoint) throws Throwable {
JLabel[] labels = (JLabel[]) thisJoinPoint.proceed();
for (JLabel label : labels)
label.setForeground(Color.RED);
return labels;
}
}
我也在我的项目中添加了使用 aspectj 所需的库,我也在 META-INF/aop.xml class 中添加了 class 的名称(我以为这两个就够用一个aspect了class):
<aspectj>
<aspects>
<aspect name="mehad.aspect.general.I18N"/>
<aspect name="mehad.aspect.general.MakeRedAspect"/>
<aspect name="mehad.aspect.general.AspSwingWorkerExecution"/>
<aspect name="mehad.aspect.general.RetryAspect"/>
<aspect name="mehad.aspect.general.AspWatchScriptExecution"/>
<!-- <aspect name="mehad.aspect.simulink.AspWatchPort"/>-->
<!--<aspect name="mehad.aspect.simulink.AspScannerManager"/>
<aspect name="mehad.aspect.simulink.AspComportInterface"/>
<aspect name="mehad.aspect.simulink.AspHeaderIcon"/>
<aspect name="mehad.aspect.simulink.AspFileUtil"/>-->
</aspects>
<!--
<weaver options="-verbose">
</weaver>
-->
</aspectj>
但它又没有使我的消息变红,而且看起来我的方面不起作用。我记得以前它工作得很好,我想那次我在 java 构建路径中添加了一些东西,我的步骤中有什么地方没有生效?
您似乎想使用加载时编织 (LTW)。为了启用 LTW,您需要在 Java 命令行上安装 AspectJ 编织代理:
java -javaagent:pathto/aspectjweaver.jar ...
我的项目中有一个 class MakeRedAspect,它使我的消息变成红色:
import java.awt.Color;
import javax.swing.JLabel;
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 MakeRedAspect {
@Pointcut("execution(static javax.swing.JLabel[] createMultiLabel(..))")
public void multilabelCreation() {}
@Around("multilabelCreation()")
public JLabel[] changeLabelColours(ProceedingJoinPoint thisJoinPoint) throws Throwable {
JLabel[] labels = (JLabel[]) thisJoinPoint.proceed();
for (JLabel label : labels)
label.setForeground(Color.RED);
return labels;
}
}
我也在我的项目中添加了使用 aspectj 所需的库,我也在 META-INF/aop.xml class 中添加了 class 的名称(我以为这两个就够用一个aspect了class):
<aspectj>
<aspects>
<aspect name="mehad.aspect.general.I18N"/>
<aspect name="mehad.aspect.general.MakeRedAspect"/>
<aspect name="mehad.aspect.general.AspSwingWorkerExecution"/>
<aspect name="mehad.aspect.general.RetryAspect"/>
<aspect name="mehad.aspect.general.AspWatchScriptExecution"/>
<!-- <aspect name="mehad.aspect.simulink.AspWatchPort"/>-->
<!--<aspect name="mehad.aspect.simulink.AspScannerManager"/>
<aspect name="mehad.aspect.simulink.AspComportInterface"/>
<aspect name="mehad.aspect.simulink.AspHeaderIcon"/>
<aspect name="mehad.aspect.simulink.AspFileUtil"/>-->
</aspects>
<!--
<weaver options="-verbose">
</weaver>
-->
</aspectj>
但它又没有使我的消息变红,而且看起来我的方面不起作用。我记得以前它工作得很好,我想那次我在 java 构建路径中添加了一些东西,我的步骤中有什么地方没有生效?
您似乎想使用加载时编织 (LTW)。为了启用 LTW,您需要在 Java 命令行上安装 AspectJ 编织代理:
java -javaagent:pathto/aspectjweaver.jar ...