Spring AOP: можно посоветовать только компоненты контекста?

Я новичок в Spring AOP и пытаюсь использовать аспект для ведения журнала. Вот моя конфигурация:

Аспект:

@Aspect
public class LoggerAspect {

 @Pointcut("execution(* aop.LoggerAspTest.*(..))")
 private void infoMethods(){}

 @Before("infoMethods()")
 public void logBefore(JoinPoint joinPoint) {
   Logger logger = Logger.getLogger(joinPoint.getTarget().getClass());

    logger.info("joinPoint's kind: " + joinPoint.getKind());
    logger.info("joinPoint's args: " + joinPoint.getArgs());
    logger.info("joinPoint's source location: " + joinPoint.getSourceLocation());
    logger.info("joinPoint's staticPart: " + joinPoint.getStaticPart());
    logger.info("joinPoint's targetClass: " + joinPoint.getTarget().getClass());
    logger.info("joinPoint's this: " + joinPoint.getThis());
 }
}

Тестовый класс:

@Component
public class LoggerAspTest {
  // test method
  public void getInfo() {
    System.out.println("in the logger aspect test method!!!");
  }
}

Класс-исполнитель:

public class Main {
  // main
  public static void main(String[] args) {
    ApplicationContext ctx = new FileSystemXmlApplicationContext("applicationContext.xml");
    LoggerAspTest aspect = (LoggerAspTest) ctx.getBean("aspectTest");
    aspect.getInfo();
 }

}

И напоследок - applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:mvc="http://www.springframework.org/schema/mvc"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:aop="http://www.springframework.org/schema/aop"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd   http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

<aop:aspectj-autoproxy/>
<bean id="aspectTest" class="aop.LoggerAspTest"/>
...

Ну, все работает отлично. Но когда я меняю класс-исполнитель (Main) так, что я создаю LoggerAspTest не с помощью Spring ApplicationContext.getBean (), а через LoggerAspTest аспект = new LoggerAspTest (); , аспект ничего не делает.

Возникает вопрос: «Верно ли, что аспекты работают только с bean-компонентами, которые были созданы контекстом Spring?». Я действительно ожидал, что аспекты будут работать как «глобальные перехватчики», которые знают, какими методами они должны действовать ...

Заранее благодарю.

5
задан Dmitry 27 December 2011 в 07:28
поделиться