Есть ли что-то, что можно добавить в сборку Java, чтобы аспекты были сплетены при запуске проекта?

У меня есть класс 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 (я думал, что этих двух достаточно для использования класса аспекта):

<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, что меньше в моих шагах, что мои аспекты не дают эффекта?

1 ответ

Решение

Похоже, вы хотите использовать время загрузки (LTW). Для того чтобы включить LTW, вам нужно иметь ткацкий агент AspectJ в командной строке Java:

java -javaagent:pathto/aspectjweaver.jar ...

Смотрите документацию AspectJ.

Другие вопросы по тегам