项目应用1: Spring中的ApplicationEvent与ApplicationListener在项目上的应用

Spring中的ApplicationEvent与ApplicationListener在项目上的应用


描述:

ApplicationContext事件机制是观察者设计模式来实现的,通过ApplicationEvent类和ApplicationListener接口,可以实现ApplicationContext事件处理。

使用:

功能上的使用类似发布和订阅这种模式

使用步骤:

1、建立event 继承 ApplicationEvent
/**
 * 1、建立event
 *
 * @author liyue
 * @date 2020-03-26 19:01
 */
public class BookingCreatedEvent extends ApplicationEvent {

    private Booking booking;

    private Action action;

    public enum Action {
        /**
         * 增加方法
         */
        ADD,
        /**
         * 修改方法
         */
        MODIFY,
        /**
         * 删除方法
         */
        DELETE;
    }


    public BookingCreatedEvent(Object source) {
        super(source);
    }

    public BookingCreatedEvent(Object source, Booking booking, Action action) {
        super(source);
        this.source = source;
        this.booking = booking;
        this.action = action;
    }

    public Booking getBooking() {
        return booking;
    }

    public void setBooking(Booking booking) {
        this.booking = booking;
    }

    public Action getAction() {
        return action;
    }

    public void setAction(Action action) {
        this.action = action;
    }
}
2、建立listener 监听 需要实现 ApplicationListener
/**
 * 2、建立ApplicationEvent
 *
 * @author liyue
 * @date 2020-03-26 19:05
 */
@Component
public class BookingEventsListener implements ApplicationListener<BookingCreatedEvent> {

    @Override
    public void onApplicationEvent(BookingCreatedEvent bookingCreatedEvent) {

        System.out.println(">>>>>>进入BookingEventsListener监听方法了>>>>>>");

        switch (bookingCreatedEvent.getAction()) {
            case ADD:
                System.out.println(">>>>>>增加成功>>>>>>");
                return;
            case DELETE:
                System.out.println(">>>>>>删除成功>>>>>>");
                return;
            case MODIFY:
                System.out.println(">>>>>>修改成功>>>>>>");
                return;
            default:
                return;
        }
    }
}
3、触发逻辑
/**
 * BookingService 服务类 注意这里要实现 ApplicationContextAware
 *
 * @author liyue
 * @date 2020-03-26 19:12
 */
@Service
public class BookingServiceImpl implements IBookingService {

    @Resource
    private ApplicationContext publisher;

    @Override
    public void saveBooing(Booking booking) {

        System.out.println(">>>>>开始进行保存Booking操作>>>>>>");

        BookingCreatedEvent bookingCreatedEvent = new BookingCreatedEvent(this, booking, BookingCreatedEvent.Action.DELETE);

        //触发
        this.publisher.publishEvent(bookingCreatedEvent);

        return;
    }
}

注意:BookingEventsListener在使用的时候,如使用ssm这种框架搭建的项目,一定要能被Spring Bean能扫描到。

4、测试结果
    @Test
    public void test() throws InterruptedException {

        Booking booking = new Booking();
        booking.setId("test");
        booking.setName("test");
        booking.setPassword("test");
        booking.setRealName("test");

        bookingService.saveBooing(booking);
    }

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TApplication.OnIdle   当应用程序变为空闲时,OnIdle事件发生。   使用OnIdle事件,可以写一个应用程序空闲时执行特定处理的事件处理程序。当应用程序不处理代码时,称为应用程序空闲。例如,当应用程序等待来自用户的输入时,应用程序为空闲。   TIdleEvent类型是OnIdle事件的类型,它指向一个应用程序空闲时运行的方法。TIdleEvent类型有一个布尔型参数Done,默认时该参数为True。若参数Done为True,当OnIdle事件返回时,调用Windows API WaitMessage函数。只有在应用程序消息队列出现一个新消息时,WaitMessage函数才放弃对其他应用程序的控制。参数Done为False时,即使应用程序不忙,也不放弃对其他应用程序的控制。   当应用程序转移到空闲状态时,只调用一次OnIdle事件。除非参数Done设置为False,否则不连续调用OnIdle事件。将参数Done设置为False的应用程序,将消耗过多的CPU时间,从而影响整个系统性能。 在delphi, 当在一个窗口上放置一个ApplicationEvents控件时,Application将会把所有的事件都转寄到ApplicationEvents; 也就是说,ApplicationEvents可以拦截到应用程序的全部事件,包括OnActivate\OnHelp\OnIdle\OnRestore\OnShortCut等等, 甚至可能通过OnMessage事件,在其截取所有post到应用程序所有窗口的消息,如WM_PAINT,WM_KEYDOWN, WM_KEYUP等常见的windows消息; 所以当有消息到来的时候就会触发它的OnMessage事件,在OnMessage监视消息就可以了。 Action的事件有OnExecute和OnUpdate,OnExecute事件在控制被触发时响应,比如说按钮被按下,菜单被按下,而OnUpdate事件是在应用程序空闲时被调用, APPLICATIONEVENTS是用来捕获程序级事件的 ApplicationEvents1Message(var Msg: tagMSG;var Handled: Boolean); {通过 Perform 向窗体发送 消息; OnMessage 收不到} {通过 SendMessage 向窗体发送 消息; OnMessage 收不到} {通过 PostMessage 向窗体发送  消息; OnMessage 可以收到}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值