spring @Advice 与其他服务通信的选项是什么?

What are the option for spring @Advice to communicate with some other service?

我们正在使用 SpringSpring AOP。对于常规 Spring Bean/Service/Repository(即 @Service 等),@Autowired 注释效果很好。但是,对于 @Advice class.

,它不会开箱即用

我的问题是:

@Advice 与另一个 @Service 通信的选项是什么?

谢谢!

一些例子

  1. advice
  2. 中搜索 db(使用 JPA;Hibernate
  3. 在系统中引发事件,使用 ApplicationEventPublisher
  4. 调用某些 X service 中定义的函数。

我整理了一个简单的实验应用程序:

@Retention(RetentionPolicy.RUNTIME)
public @interface InjectAdviceHere {
}

@Service
public class FooService {
    public void foo(){
        System.out.println("foo");
    }
}

@Service
public class BarService {
    @InjectAdviceHere
    public void bar(){
        System.out.println("bar");
    }
}


@Aspect
@Component
public class MyAspect {

    private final FooService fooService;

    @Autowired
    public MyAspect(FooService fooService) {
        super();
        this.fooService = fooService;
    }

    @Before("@annotation(ann)")
    public void advize(InjectAdviceHere ann) {
        fooService.foo();
    }

}

@SpringBootApplication
@EnableAspectJAutoProxy
public class DemoApplication {

    private @Autowired BarService barService;

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @PostConstruct
    public void test(){
        barService.bar();
    }
}

输出为:

foo
bar

如您所见,在 Spring 中,AOP 方面与任何其他 bean 一样被对待,并且可以正常注入依赖项。