spring even事件模式 监听者模式

tech2025-08-22  1

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}
最新回复(0)