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 +
'}';
}
}
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);
}
}
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);
}
}
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);
}
}
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);
}
}
serviceprovider.demo.test.even.listener.TestSourceListenerUser{name='lookingnorth', age=25}
serviceprovider.demo.test.even.listener.TestSourceListener2User{name='lookingnorth', age=25}