gpt4 book ai didi

java - 如何使用Spring Boot注册观察者?

转载 作者:行者123 更新时间:2023-11-30 06:39:10 25 4
gpt4 key购买 nike

我想使用 Spring Boot 实现 GoF 观察者设计模式,而不使用 Spring 事件。
代码示例:

    @Component
public class MyObservable extends java.util.Observable {
void myObservableMethod(Object obj){
notifyObservers(obj);
}
}

@Component
public class MyObserver implements java.util.Observer{
@Override
public void update(java.util.Observable observable, Object obj) {
System.out.println(obj.toString());
}
}
  1. java.util 类是该模式的良好实现吗?
  2. 如何向 observable 注册观察者,并且仍然能够使用 Spring 依赖注入(inject)?
    我可以在哪里调用 myObserver.accept(myObservable); ?

    @Autowired
    MyObservable myObservable;
    @Autowired
    MyObserver myObservable;

    myObserver.accept(myObservable); //??

最佳答案

Are the java.util classes a good implementation for that pattern ?

GoF 模式及其 Java 实现有点过时,并且存在一些问题。
这实际上取决于您想要解决的问题,但如果您的应用程序没有大量使用事件并且您不想引入诸如 spring 事件或 RxJava 之类的东西,那么它可能是合适的。

How can I register the observer with the observable , and still able to use Spring Depedency Injection? Where I can call myObserver.accept(myObservable); ?

请参阅下面的示例,了解如何定义 Observable 和一些观察者,将它们连接起来并最终向它们发送一些事件。

@SpringBootApplication
public class ObserverApplication {

public static void main(String[] args) {
try(ConfigurableApplicationContext ctx = SpringApplication.run(ObserverApplication.class, args)){
Observable observable = ctx.getBean(Observable.class);
observable.notifyObservers("Hello");
}
}

@Bean
public Observable myObservable(){
return new MyObservable();
}

@Bean
MyObserver observer1(){
return new MyObserver(1);
}

@Bean
MyObserver observer2(){
return new MyObserver(2);
}

@Autowired
public void configureObservers(Observable myObservable, MyObserver observer1, MyObserver observer2){
myObservable.addObserver(observer1);
myObservable.addObserver(observer2);
}

static class MyObserver implements Observer {

int id;

public MyObserver(int id) {
this.id = id;
}

@Override
public void update(Observable o, Object arg) {
System.out.println("Observer: " + id + ", Received object: " + arg);
}
}

static class MyObservable extends Observable {
@Override
public void notifyObservers(Object arg){
this.setChanged();
super.notifyObservers(arg);
}
}
}

关于java - 如何使用Spring Boot注册观察者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44688680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com