Spring AOP中的目标对象是什么

时间:2019-06-20 18:35:04

标签: spring-aop

我是spring aop的初学者,我正在阅读spring aop文档以了解概念,但无法理解“目标对象”。

文档说,目标对象是“一个或多个方面所建议的对象。也称为建议对象”

在一个或多个方面得到建议是什么意思?谁能向我解释莱曼术语中的目标对象,因为我还是个初学者。

2 个答案:

答案 0 :(得分:0)

有关一些基本AOP术语的简单说明,请参阅my other answer。请先阅读该内容,然后再继续阅读此处。

因此,目标对象是您要向其添加新行为的(Java或Spring)组件,通常是跨领域关注点,即某些行为应用于代码库中的许多类。

方面是一类,您可以在其中实现该跨领域关注点,并确定在何处以及如何应用它。 where 是由 pointcut 定义的,它是某种搜索表达式,用于查找代码库中相关的部分以将行为应用到其中。 方法是通过称为建议的方面方法实现的。

因此,当我们说一个方面建议一个对象时,这意味着它在不更改类本身的情况下为其添加了(跨领域的)行为。

  • 在Spring AOP中,这主要是方法拦截,即在方法执行之前或之后执行某些操作。
  • 在功能更强大的AspectJ中,您还可以拦截成员变量和构造函数执行的更改。此外,您可以通过添加新成员或方法或使目标类实现接口等来更改类结构本身。

答案 1 :(得分:0)

是否可以定义多个目标,如下所示:

@Aspect
@Component
public class EventHandlerAspect {

        @Around(value = "execution(* com.handler.EventHandler+.handleEvent(..)) "
        + "&& within(com.handler..*) "
        + "&& this(eventHandler) "
        + "&& args(message))")
       public Object around(ProceedingJoinPoint proceedingJoinPoint, 
        EventHandler<Object> eventHandler,
        Message<Object> message) throws Throwable {
            Object obj = null;
           // 1. invoke preProcess
            eventHandler.preProcess(message);
            try {
                // 2. invoke the join point
                obj = proceedingJoinPoint.proceed();
            } finally {
                // 3. invoke postProcess
                eventHandler.postProcess(message);
            }
            return obj;
         }
      }