事件EVENT

        首先想一下什么是事件,事件有什么作用,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";
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值