spring环境使用观察者模式ApplicationListener

spring环境使用观察者模式ApplicationListener

demo

具体事件对象类

public class MyEvent extends ApplicationEvent {
    
    

    public MyEvent(Object source) {
    
    
        super(source);
    }

    public <T> T getEventSource(Class<T> tClass){
    
    
        return JSON.parseObject(String.valueOf(getSource()),tClass);
    }
}

抽象事件观察者

public abstract class AbMyApplicationListener implements ApplicationListener<MyEvent> {
    
    

    @Override
    public void onApplicationEvent(MyEvent event) {
    
    
        System.out.println("收到的监听事件抽象类:");
        //子类去实现具体逻辑
        execute(event);
    }

     abstract void execute(MyEvent event);
}

具体实现逻辑的子类

@Component
public class MyApplicationListener extends AbMyApplicationListener {
    
    
    @Override
    void execute(MyEvent event) {
    
    
        System.out.println("我收到了通知,我是具体执行业务逻辑的子类:"+ event.getEventSource(Map.class));
    }
}

获取ApplicationContext

@Component
public class ApplicationContextUtil implements ApplicationContextAware {
    
    

    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    
    
        this.applicationContext = applicationContext;
    }

    public static ApplicationContext getApplicationContext() {
    
    
        return applicationContext;
    }
}

被观察者,事件发布者

@RunWith(SpringRunner.class)
@SpringBootTest(classes = DemoApplication.class)
public class AppTest {
    
    
    @Test
    public void test() {
    
    
        Map<String,String> map = new HashMap<>();
        map.put("name","zhangsan");
        map.put("age","22");
        MyEvent myEvent = new MyEvent(JSON.toJSONString(map));
        ApplicationContext applicationContext = ApplicationContextUtil.getApplicationContext();
        applicationContext.publishEvent(myEvent);
    }
}

jdk自带实现观察者

猜你喜欢

转载自blog.csdn.net/qq_37904966/article/details/108475880