首先想一下什么是事件,事件有什么作用,Java为什仫会出现事件,使用事件又有什么好处。
一、什么是事件:
事件,中文里面的意思就是一件事,是一个完整的事,比如说我们周末开车回家就是一个事件,这个事件是一个完整的,就是周末你要开车回家这件事。在Java中事件是什么那,在Java中事件就是另外一个小程序,举个例子,就是假设我呢主线程是处理下订单的,我们可以发布一个事件是监听是否发货的。
二、事件有什么作用:
中文意思就是事件是推动故事发展的,也就是有这个事件我们就会处理这件事,也就是周末肯定会开车回家。Java中他的作用类似于一个异步,但也不是绝对的异步,因为当监听监听到事件的时候,就会执行事件的逻辑。
三、Java为什仫要用事件,有什么好处
1. 解耦合:通过事件驱动的方式,事件源和事件监听器之间可以实现解耦合。事件源只需要负责触发事件,而不需要关心具体的事件处理逻辑。事件监听器则只需要关注自己感兴趣的事件,并提供相应的处理方法。
2. 灵活性:事件驱动的编程模型可以使程序更加灵活。通过注册不同的事件监听器,可以在不修改源代码的情况下改变程序的行为。这种扩展性使得程序更易于维护和扩展。
3. 响应性:事件驱动的编程模型可以使程序更加响应用户的操作。例如,当用户点击按钮时,按钮会触发相应的点击事件,程序可以立即响应并执行相应的操作。
在Java中,事件的使用非常广泛。例如,Swing GUI编程中的按钮点击事件、鼠标移动事件等都是基于事件驱动的。Java中的网络编程、多线程编程等也经常使用事件来处理异步操作。
Java中的事件机制可以帮助程序实现解耦合、提高灵活性和响应性。通过事件驱动的方式,程序可以更加灵活地处理用户的操作、系统的通知以及外部设备的响应等事件。
上代码:
自定义事件:
package com.xxx.event;
import org.springframework.context.ApplicationEvent;
//自定义事件
public class MyEvent extends ApplicationEvent {
public MyEvent(Object source) {
super(source);
}
}
自定义监听事件:
package com.xxx.event;
import com.xxx.domain.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
@Component
public class MyEventHandler {
private final Logger log = LoggerFactory.getLogger(getClass());
@Async
@EventListener(MyEvent.class)
public void handler(MyEvent event) {
User user = (User) event.getSource();
log.info("事件被调用,开始异步执行");
System.out.println(user);
}
}
发布事件:
package com.xxx.controller;
import com.xxx.domain.User;
import com.xxx.event.MyEvent;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
@RequestMapping("/xxx/user")
public class UserController {
@Resource
private ApplicationEventPublisher eventPublisher;
@GetMapping("/find")
public String findUser(){
User user = new User();
user.setUserName("xxx");
user.setPassWord("123321");
user.setAge("18");
//调用事件
eventPublisher.publishEvent(new MyEvent(user));
System.out.println("调用事件发布");
return "欢迎来到事件世界,gogogog";
}
}