Я запускаю проект 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)
Может ли кто-нибудь объяснить, является ли конкретная реализация класса обязательной или нет. Если это не требуется, пожалуйста, помогите мне понять, как это работает. Благодарю.
Если вы не укажете конкретный аспект, то рекомендации в абстрактном аспекте не будут применяться. Скомпилируйте это:
class C {}
abstract aspect X { before():staticinitialization(C) {}}
и совет в X не будет применяться к C. Удалите abstract
или укажите конкретный подспектрь X, и он будет применяться. Тем не менее, это справедливо только для рекомендаций - любая статическая сквозная перерезка в абстрактном аспекте будет применяться, например, для описания типа или метода или типа поля.
У вас есть два варианта для конкретного аспекта - либо код, либо XML, и вы идете по XML-маршруту, который в порядке. Я думаю, что первое (плохо сформулированное) информационное сообщение, которое вы показываете, говорит вам, что система определяет конкретный аспект в соответствии с вашей спецификацией, а не то, что вам нужно.