spring even事件模式 监听者模式

Spring Even事件

  • 1.1 定义一个数据源,业务数据user类(监听user业务数据变化,做对应的改变)
package serviceprovider.demo.test.even.source;

/**
 * @program: Alibaba
 * @description: 用户类
 * @author: Wei Zeng
 * @create: 2020-09-03 18:24
 */
public class User {
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

  • 1.2 把业务数据放进到事件源中
package serviceprovider.demo.test.even.source;

import javafx.application.Application;
import org.springframework.context.ApplicationEvent;

/**
 * @program: Alibaba
 * @description: 测试事件源
 * @author: Wei Zeng
 * @create: 2020-09-03 18:21
 */
public class TestSource extends ApplicationEvent {

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

  • 2.1 事件监听者,监听到业务数据变化(user数据变化),执行对应的逻辑
package serviceprovider.demo.test.even.listener;

import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import serviceprovider.demo.test.even.source.TestSource;
import serviceprovider.demo.test.even.source.User;

/**
 * @program: Alibaba
 * @description: 事件监听者---监听到事件改变,执行对应逻辑
 * @author: Wei Zeng
 * @create: 2020-09-03 18:23
 */
@Component
public class TestSourceListener implements ApplicationListener<TestSource> {
    @Override
    public void onApplicationEvent(TestSource testSource) {
        User user = (User)testSource.getSource();
        System.out.println(this.getClass().getName() + user);
    }
}

  • 2.2 再来一个事件监听者
package serviceprovider.demo.test.even.listener;

import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import serviceprovider.demo.test.even.source.TestSource;
import serviceprovider.demo.test.even.source.User;

/**
 * @program: Alibaba
 * @description:
 * @author: Wei Zeng
 * @create: 2020-09-04 09:48
 */
@Component
public class TestSourceListener2 implements ApplicationListener<TestSource> {

    @Override
    public void onApplicationEvent(TestSource testSource) {
        User user = (User)testSource.getSource();
        System.out.println(this.getClass().getName() + user);
    }
}

  • 3.1 事件发布者-发布事件(触动数据的变化)
package serviceprovider.demo.test.even;

import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;
import serviceprovider.demo.test.even.listener.TestSourceListener;
import serviceprovider.demo.test.even.source.TestSource;
import serviceprovider.demo.test.even.source.User;

import javax.annotation.Resource;

/**
 * @program: Alibaba
 * @description: 事件发布者---发布事件
 * @author: Wei Zeng
 * @create: 2020-09-04 09:43
 */
@Component
public class TestPublisher {

    @Resource
    private ApplicationEventPublisher applicationEventPublisher;

    public void push(User user){
        TestSource testSource = new TestSource(user);
        applicationEventPublisher.publishEvent(testSource);
    }
}

  • 4 把项目跑起来,单元测试
package serviceprovider.demo;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import serviceprovider.demo.fegin.AaFegin;
import serviceprovider.demo.test.even.TestPublisher;
import serviceprovider.demo.test.even.source.User;

import javax.annotation.Resource;

@SpringBootTest
class DemoApplicationTests {

    @Resource
    private TestPublisher testPublisher;
    @Test
    void contextLoads2() {
        User user = new User();
        user.setAge(25);
        user.setName("lookingnorth");
        testPublisher.push(user);
    }

}

  • 5 结果数据—两个监听者都监听到了数据
serviceprovider.demo.test.even.listener.TestSourceListenerUser{name='lookingnorth', age=25}
serviceprovider.demo.test.even.listener.TestSourceListener2User{name='lookingnorth', age=25}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值