Совет AOP не работает должным образом с шаблоном Builder - PullRequest
0 голосов
/ 07 марта 2019

У меня проблема с советом AOP, когда я использую шаблон Builder.Когда я не использую Builder, все в порядке.Мой аспект:

@Aspect
public class LoggingAspect {
private final String POINTCUT = "execution(* com.project.my.spring.Triangle.*(..))";

@Around(POINTCUT)
public Object aroundMethodAdvice(ProceedingJoinPoint joinPoint) {
    System.out.println("Executing method: " + joinPoint.toString());

    Instant startTime = Instant.now();
    Object value = joinPoint;
    try {
        value = joinPoint.proceed();
    } catch (Throwable e) {
        e.printStackTrace();
    }
    Instant endTime = Instant.now();

    System.out.println("Ending method advice. Execution time of " + joinPoint.toString() + " method is "
            + Duration.between(startTime, endTime).getNano() + " nanoseconds.");

    return value;

    }
}

Класс треугольника:

package com.project.my.spring;

public class Triangle {

    private String message;

    public void someTriangleMethod(){
    System.out.println("Inside com.project.my.spring.Triangle class. Have fun!");
    }

    public static class Builder {
        private final String message;

        public Builder (String message){
            this.message = message;
        }

        public Triangle build() {
            return new Triangle(this);
        }
    }
    private Triangle(Builder builder) {
        message = builder.message;
    }
}

И весь вывод: Внутри com.project.my.spring.Triangle class.Веселитесь!

Мне нужно иметь: Выполнение метода ... Внутри ... Завершающий метод ...

Я добавил компонент для треугольника в свой класс конфигурациии теперь работает, но почему?

@Configuration
@EnableAspectJAutoProxy
public class ShapeConfig {

    @Bean
    public LoggingAspect loggingAspect() { return new LoggingAspect();}

    @Bean
    public Triangle.Builder buildTriangle(){
        return new Triangle.Builder("Builder message.");
    }

    @Bean
    public Triangle triangle() {
        return buildTriangle().build();
    }/**/
}

Раньше я пытался:

Triangle triangle = builder.build();
triangle.someTriangleMethod();

Почему это не сработало?

...