三要素:
1.事件
2.监听器
3.触发动作
使用步骤:
1.创建一个监听器,实现ApplicationListener接口,泛型中指定事件类型
//实现接口写法
public class PrintListener implements ApplicationListener<DemoEvent> {
@Override
public void onApplicationEvent(DemoEvent event) {
System.out.println("调用DemoEvent的print方法输出其内容:");
event.print();
}
}
//注解写法
@Component
public class UserEventHandler {
@EventListener
public void handleLoginEvent(LoginEvent loginEvent){
System.out.println("监听登入成功");
//TODO 调用统计接口记录时间,地点
}
}
2.创建一个事件,继承ApplicationEvent抽象类
public class DemoEvent extends ApplicationEvent {
private String text;
/**
* Create a new ApplicationEvent.
*
* @param source the object on which the event initially occurred (never {@code null})
*/
public DemoEvent(Object source) {
super(source);
}
public DemoEvent(Object source, String text) {
super(source);
this.text = text;
}
public void print() {
System.out.println("print event content:" + this.text);
}
}
3.注册监听器到容器中,发布事件。
//使用示例
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(DemoApplication.class, args);
//注册监听器
context.addApplicationListener(new PrintListener());
//发布事件
context.publishEvent(new DemoEvent(new Object(),"hello world."));
}
}
//在Service中使用
@Service("userService")
public class UserServiceImpl implements UserService,ApplicationContextAware{
private ApplicationContext applicationContext;
@Override
public void login(User user) {
//TODO 登入校验操作。。。。
publish(new LoginEvent(new Object(),"我要登入了"));
}
public void publish(LoginEvent loginEvent){
applicationContext.publishEvent(loginEvent);
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
}
Comments | NOTHING