Главная » Spring » Передача аргументов аннотированным  советам Spring

0

Передача параметров советам, созданным с помощью аннотаций

@AspectJ, мало чем отличается от случая, когда аспекты объявля- ются в конфигурационном XML-файле Spring. В действительности

XML-элементы, использовавшиеся выше, имеют прямые эквива- ленты в виде аннотаций @AspectJ, как показано ниже, на примере нового класса Magician.

Листинг 5.7. Превращение класса Magician в аспект с помощью аннотаций  @AspectJ

package com.springinaction.springidol;

import  org.aspectj.lang.annotation.Aspect; import  org.aspectj.lang.annotation.Before; import   org.aspectj.lang.annotation.Pointcut;

@Aspect

public class Magician implements MindReader { private   String   thoughts;

// Объявление параметризованного среза множества точек сопряжения

@Pointcut("execution(*   com.springinaction.springidol."

+    "Thinker.thinkOfSomething(String))    &&     args(thoughts)") public    void    thinking(String    thoughts)    {

}

@Before("thinking(thoughts)")         // Передача параметра в совет public  void  interceptThoughts(String  thoughts)  {

System.out.println("Intercepting volunteer’s thoughts : "

+   thoughts); this.thoughts    =    thoughts;

}

public  String  getThoughts()  { return   thoughts;

}

}

Элемент <aop:pointcut> является эквивалентом аннотации @Pointcut, а элемент <aop:before> – эквивалентом аннотации @Before. Един- ственное важное отличие состоит в том, что аннотации @AspectJ могут опираться на синтаксис языка Java для объявления значений параметров, передаваемых советам. Поэтому здесь нет никакой по- требности в наличии прямого эквивалента атрибута arg-names эле- мента <aop:before>.

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии