Обязательно ли реализовывать конкретный аспект в аспекте?

1

Я запускаю проект HelloWorld, используя время загрузки во времени (LTW) в аспектеJ. Я определил только абстрактный аспект. Я не определял конкретный аспект, но упоминал атрибут "name" <concrete-aspect> как main.java.aop.helloworld.MyHelloWorldAspect в aop.xml, как показано ниже:

<concrete-aspect name="main.java.aop.helloworld.MyHelloWorldAspect"
        extends="main.java.aop.helloworld.HelloWorldAspect">
        <pointcut name="helloWorld"
            expression="execution(public static void HelloWorld.say*(..))" />
    </concrete-aspect>

Я мог бы запустить приложение и получить желаемый результат. Но ниже строка печатается для определения конкретного аспекта.

[URLClassLoader@ddc3fe] info define aspect main.java.aop.helloworld.MyHelloWorldAspect

Мне интересно, является ли конкретная реализация класса обязательной или нет, поскольку она печатает сообщение INFO для определения конкретного аспекта. Кроме того, скручивание и применение аспект и рекомендации отлично работают в соответствии с приведенным ниже сообщением INFO.

[URLClassLoader@ddc3fe] weaveinfo Join point 'method-execution(void main.java.aop.helloworld.HelloWorld.say(java.lang.String))' in Type 'main.java.aop.helloworld.HelloWorld' (HelloWorld.java:5) advised by before advice from 'main.java.aop.helloworld.MyHelloWorldAspect' (HelloWorldAspect.java)

Может ли кто-нибудь объяснить, является ли конкретная реализация класса обязательной или нет. Если это не требуется, пожалуйста, помогите мне понять, как это работает. Благодарю.

Теги:
aop
aspectj

1 ответ

0
Лучший ответ

Если вы не укажете конкретный аспект, то рекомендации в абстрактном аспекте не будут применяться. Скомпилируйте это:

class C {}
abstract aspect X { before():staticinitialization(C) {}}

и совет в X не будет применяться к C. Удалите abstract или укажите конкретный подспектрь X, и он будет применяться. Тем не менее, это справедливо только для рекомендаций - любая статическая сквозная перерезка в абстрактном аспекте будет применяться, например, для описания типа или метода или типа поля.

У вас есть два варианта для конкретного аспекта - либо код, либо XML, и вы идете по XML-маршруту, который в порядке. Я думаю, что первое (плохо сформулированное) информационное сообщение, которое вы показываете, говорит вам, что система определяет конкретный аспект в соответствии с вашей спецификацией, а не то, что вам нужно.

  • 0
    Отлично! большое спасибо за очистку моего запроса .. Энди

Ещё вопросы

Сообщество Overcoder
Наверх
Меню