Как применить аспект Spring aop к прототипу bean-компонента с областью видимости

Как применить аспект Spring aop к прототипу bean-компонента с областью видимости

Разве аспекты Spring неприменимы к прототипу bean-компонента с областью видимости? У меня есть компонент с областью видимости прототипа с парой аргументов конструктора. Бин создается во время выполнения с этими аргументами.

Моя пружинная конфигурация такая -

@Configuration
@EnableAspectJAutoProxy
public class SpringConfiguration {
  @Bean
  @Scope("prototype")
  public PrototypeBean prototypeBean(SomeDTO dtoArg1, OtherDTO dtoArg2) {
     return new PrototypeBean(dtoArg1, dtoArg2);
  }

  @Bean
  public TestAspect testAspect() {
     return new TestAspect();
  }
}

Я получаю bean-компонент PrototypeBean в коде через applicationContext, например:

applicationContext.getBean(PrototypeBean.class, dtoArg1, dtoArg2);

Но на удивление этот аспект не выполняется при вызове метода точки соединения прототипа bean-компонента. Я уверен, что созданный мной pointcut правильный, потому что в eclipse плагин aspectJ показывает визуальный маркер ссылки aspectJ в методе joinPoint, который показывает, что pointcut правильный, но не уверен, почему он не выполняется во время выполнения, когда вызывается метод точки соединения PrototypeBean.

Подхожу ли я к контейнеру неправильно, чтобы получить bean-компонент, или у контейнера нет возможности составить совет по этому прототипу bean-компонента?

Благодарю, если по этому поводу может быть предоставлена ​​какая-либо помощь / предложения.


person Kshitij    schedule 27.09.2020    source источник


Ответы (1)


Я попробовал то же самое с Spring Boot 2.3.4, и он отлично работает.

Вот репо. Убедитесь, что у вас есть следующие зависимости для работы EnableAspectJAutoProxy.

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <scope>compile</scope>
    </dependency>
person Community    schedule 27.09.2020