spring @Advice 与其他服务通信的选项是什么?
What are the option for spring @Advice to communicate with some other service?
我们正在使用 Spring
和 Spring AOP
。对于常规 Spring Bean/Service/Repository
(即 @Service
等),@Autowired
注释效果很好。但是,对于 @Advice
class.
,它不会开箱即用
我的问题是:
@Advice
与另一个 @Service
通信的选项是什么?
谢谢!
一些例子
- 在
advice
中搜索 db
(使用 JPA;Hibernate
)
- 在系统中引发事件,使用
ApplicationEventPublisher
- 调用某些 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 一样被对待,并且可以正常注入依赖项。
我们正在使用 Spring
和 Spring AOP
。对于常规 Spring Bean/Service/Repository
(即 @Service
等),@Autowired
注释效果很好。但是,对于 @Advice
class.
我的问题是:
@Advice
与另一个 @Service
通信的选项是什么?
谢谢!
一些例子
- 在
advice
中搜索 - 在系统中引发事件,使用
ApplicationEventPublisher
- 调用某些 X
service
中定义的函数。
db
(使用 JPA;Hibernate
)
我整理了一个简单的实验应用程序:
@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 一样被对待,并且可以正常注入依赖项。