精华内容
下载资源
问答
  • event事件

    2021-02-02 15:14:33
    event对象 任何事件的触发都会产生event对象event事件对象属性键盘事件 onkeydown 按下键盘触发 onkeyup 松开键盘触发 onkeypress 按下并松开 键盘上每个按键都有对应的ascii码事件冒泡 当最里面的元素触发了事件的...

    event对象   任何事件的触发都会产生event对象

    event事件对象属性

    键盘事件
    onkeydown 按下键盘触发
    onkeyup 松开键盘触发
    onkeypress 按下并松开
    键盘上每个按键都有对应的ascii码

    鼠标滚轮事件
    onwheel 事件在鼠标滚轮在元素上下滚动时触发(以前的叫法:onmousewheel)
    在不同浏览器上不同(兼容问题)
    ie / opera / chrome
        e.wheelDelta   滚轮往上走 => 150  滚轮往下走 => -150
    firefox     DOMMouseScroll 必须用addEventListener来实现绑定
        evnet.detail      滚轮往上走 => -3     滚轮往下走 => 3
        

    <p>
        <label for="wheelDelta"> 滚动值:</label>(IE/Opera)
        <input type="text" id="wheelDelta" />
    </p>
    <p>
        <label for="detail"> 滚动值:(Firefox)</label>
        <input type="text" id="detail" />
    </p>
    
    <script type="text/javascript">
     var scrollFunc = function(e) {
          // e是Firefox的事件 window.event是chrome/ie/opera的事件
       var ee = e || window.event;
          // console.log(ee); //可以看看ee.wheelDelta和e.detail在浏览器中的值;
       var t1 = document.getElementById("wheelDelta");
       var t2 = document.getElementById("detail");
       if(ee.wheelDelta) { //IE/Opera/Chrome   
          t1.value = ee.wheelDelta;
       } else if(ee.detail) { //Firefox    
          t2.value = ee.detail;
       }
    }
    /*注册事件*/
      if(document.addEventListener) {
         //W3C FF
         document.addEventListener('DOMMouseScroll', scrollFunc, false);
       } 
          //IE/Opera/Chrome/Safari
       window.onwheel = document.onwheel = scrollFunc; 
    </script>


    事件冒泡
    当最里面的元素触发了事件的时候,会依次向上触发所有元素的相同事件(从触发事件的元素开始一直向上触发)
          阻止事件冒泡
    event.stopPropagation();
    说明:stopPropagation是事件对象Event的一个方法,作用是阻止目标元素事件冒泡到父级元素。
    兼容写法

    阻止浏览器的默认行为
    常见的默认行为   链接<a href="/index.php">点我</a>  往属性href指定的地址跳转
                                 提交按钮<input type=”submit”>   往form表单属性action指定的地址跳转

    //阻止a标签的跳转行为
    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>Document</title>
    	<style type="text/css">
    
    	</style>
    </head>
    <body>
       <a href="demo.html" id="form">点击跳转</a>
    <script>
         var fo = document.getElementById('form');
             fo.onclick = stopDefault;
          function stopDefault(evnet){
              var e = event || window.event;
              if(e.preventDefault){
                  e.preventDefault();
              }else{
                  e.returnValue = false;
              }
          }
    </script>
    </body>
    </html>
    //阻止表单的提交行为
    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>Document</title>
    	<style type="text/css">
    
    	</style>
    </head>
    <body>
    	<form action="come.html" id="form">
    		<input type="text" name="">
    		<input type="submit" value="提交">
    	</form>
    <script>
         var fo = document.getElementById('form');
             fo.onsubmit = stopDefault;
          function stopDefault(evnet){
              var e = event || window.event;
              if(e.preventDefault){
                  e.preventDefault();
              }else{
                  e.returnValue = false;
              }
          }
    </script>
    </body>
    </html>

    事件的监听器
          DOM0级事件 --- 行内绑定
          DOM1级事件 --- 事件处理程序名字以on开头 click=>onclick , load=>onload , change=>onchange
          DOM2级事件如下

    ie6、7、8事件类型需要“on”,主流浏览器不需要“on”
    如果设置事件时,明确知道该事件需要取消,这时候只能写有名函数
    设置事件和取消事件的格式必须一一对应


       注意 : 通过DOM1级事件同时绑定多个同类型的事件,只有最后绑定的事件能起作用,前面的会被覆盖掉
                 DOM2级绑定多个事件会依次触发

     

    事件流   
        三个阶段 事件冒泡 => 事件捕获 => 目标阶段
        两种类型 : 冒泡型(从里向外),后执行      捕获型(从外向里),先执行

    事件委托机制(好处:减少对DOM的操作)
        事件委托是利用事件的冒泡原理来实现的,把目标节点的事件绑定到父节点上,自己所触发的事件让父节点代为执行

    展开全文
  • Spring Event事件驱动

    2021-03-09 05:34:09
    Spring事件驱动模型,简单来说类似于Message-Queue消息队列中的Pub/Sub发布/订阅模式,也类似于Java设计模式中的观察者模式。自定义事件Spring的事件接口位于org.springframework.context.ApplicationEvent,源码...

    Spring事件驱动模型,简单来说类似于Message-Queue消息队列中的Pub/Sub发布/订阅模式,也类似于Java设计模式中的观察者模式。

    自定义事件

    Spring的事件接口位于org.springframework.context.ApplicationEvent,源码如下:

    public abstract class ApplicationEvent extends EventObject {

    private static final long serialVersionUID = 7099057708183571937L;

    private final long timestamp;

    public ApplicationEvent(Object source) {

    super(source);

    this.timestamp = System.currentTimeMillis();

    }

    public final long getTimestamp() {

    return this.timestamp;

    }

    }

    继承了Java的事件对象EventObject,所以可以使用getSource()方法来获取到事件传播对象。

    自定义Spring事件

    public class CustomSpringEvent extends ApplicationEvent {

    private String message;

    public CustomSpringEvent(Object source, String message) {

    super(source);

    this.message = message;

    }

    public String getMessage() {

    return message;

    }

    }

    然后定义事件监听器,该监听器实际上等同于消费者,需要交给Spring容器管理。

    @Component

    public class CustomSpringEventListener implements ApplicationListener {

    @Override

    public void onApplicationEvent(CustomSpringEvent event) {

    System.out.println("Received spring custom event - " + event.getMessage());

    }

    }

    最后定义事件发布者

    @Component

    public class CustomSpringEventPublisher {

    @Autowired

    private ApplicationEventPublisher applicationEventPublisher;

    public void doStuffAndPublishAnEvent(final String message) {

    System.out.println("Publishing custom event. ");

    CustomSpringEvent customSpringEvent = new CustomSpringEvent(this, message);

    applicationEventPublisher.publishEvent(customSpringEvent);

    }

    }

    创建测试类

    @RunWith(SpringRunner.class)

    @SpringBootTest

    public class CustomSpringEventPublisherTest {

    @Autowired

    private CustomSpringEventPublisher publisher;

    @Test

    public void publishStringEventTest() {

    publisher.doStuffAndPublishAnEvent("111");

    }

    }

    运行测试类,可以看到控制台打印了两条重要信息

    //发布事件

    Publishing custom event.

    //监听器得到了事件,并相应处理

    Received spring custom event - 111

    由于Spring事件是发布/订阅的模式,而发布订阅模式有以下三种情况

    1生产者 - 1消费者

    1生产者 - 多消费者

    多生产者 - 多消费者

    上面举的例子是第一种情况,我们来试试其他两个情况

    继续创建一个事件监听器作为消费者:

    @Component

    public class CustomSpringEventListener2 implements ApplicationListener {

    @Override

    public void onApplicationEvent(CustomSpringEvent event) {

    System.out.println("CustomSpringEventListener2 Received spring custom event - " + event.getMessage());

    }

    }

    运行测试类后,可以观察到,控制台顺序打印了两条消费信息:

    Publishing custom event.

    CustomSpringEventListener1 Received spring custom event - 111

    CustomSpringEventListener2 Received spring custom event - 111

    说明,Spring的发布订阅模式是广播模式,所有消费者都能接受到消息,并正常消费

    再试试第三种多生产者 - 多消费者的情况

    继续创建一个发布者,

    @Component

    public class CustomSpringEventPublisher2 {

    @Autowired

    private ApplicationEventPublisher applicationEventPublisher;

    public void doStuffAndPublishAnEvent(final String message) {

    System.out.println("CustomSpringEventPublisher2 Publishing custom event. ");

    CustomSpringEvent customSpringEvent = new CustomSpringEvent(this, message);

    applicationEventPublisher.publishEvent(customSpringEvent);

    }

    }

    控制台输出:

    CustomSpringEventPublisher Publishing custom event.

    CustomSpringEventListener1 Received spring custom event - 111

    CustomSpringEventListener2 Received spring custom event - 111

    CustomSpringEventPublisher2 Publishing custom event.

    CustomSpringEventListener1 Received spring custom event - 222

    CustomSpringEventListener2 Received spring custom event - 222

    从以上输出内容,我们可以猜测到,Spring的事件发布订阅机制是同步进行的,也就是说,事件必须被所有消费者消费完成之后,发布者的代码才能继续往下走,这显然不是我们想要的效果,那有没有异步执行的事件呢?

    Spring中的异步事件

    要使用Spring 的异步事件,我们需要自定义异步事件配置类

    @Configuration

    public class AsynchronousSpringEventsConfig {

    @Bean(name = "applicationEventMulticaster")

    public ApplicationEventMulticaster simpleApplicationEventMulticaster() {

    SimpleApplicationEventMulticaster eventMulticaster

    = new SimpleApplicationEventMulticaster();

    eventMulticaster.setTaskExecutor(new SimpleAsyncTaskExecutor());

    return eventMulticaster;

    }

    }

    发布和订阅的代码不用变动,直接运行测试类,控制台将打印出:

    CustomSpringEventPublisher Publishing custom event.

    CustomSpringEventPublisher2 Publishing custom event.

    CustomSpringEventListener1 Received spring custom event - 111

    CustomSpringEventListener2 Received spring custom event - 111

    CustomSpringEventListener2 Received spring custom event - 222

    CustomSpringEventListener1 Received spring custom event - 222

    可以看到,两个发布者几乎同时运行,证明监听器是异步执行的,没有阻塞住发布者的代码。准确的说,监听器将在一个单独的线程中异步处理事件。

    Spring自带的事件类型

    事件驱动在Spring中是被广泛采用的,我们查看ApplicationEvent的子类可以发现许多Event事件,在此不赘述。

    c4dada65ea754f14d1e51e6ec76f5ff8.png

    注解驱动的监听器

    从Spring 4.2开始,事件监听器不需要是实现ApplicationListener接口的bean,它可以通过@EventListener注解在任何被Spring容器管理的bean的公共方法上。

    @Component

    public class AnnotationDrivenContextStartedListener {

    @EventListener

    public void handleContextStart(CustomSpringEvent cse) {

    System.out.println("Handling Custom Spring Event.");

    }

    }

    控制台输出结果:

    CustomSpringEventPublisher Publishing custom event.

    Handling Custom Spring Event.

    CustomSpringEventPublisher2 Publishing custom event.

    Handling Custom Spring Event.

    同样的,我们可以看出,这个事件监听器是同步执行的,如果要改为异步监听器,在事件方法上加上@Async,并且在Spring应用中开启异步支持(在SpringBootApplication上添加@EnableAsync)。

    @Component

    public class AnnotationDrivenContextStartedListener {

    @Async

    @EventListener

    public void handleContextStart(CustomSpringEvent cse) {

    System.out.println("Handling Custom Spring Event.");

    }

    }

    再次运行测试类:

    CustomSpringEventPublisher Publishing custom event.

    CustomSpringEventPublisher2 Publishing custom event.

    Handling Custom Spring Event.

    Handling Custom Spring Event.

    泛型支持

    创建一个通用泛型事件模型

    @Data

    public class GenericSpringEvent {

    private T message;

    protected boolean success;

    public GenericSpringEvent(T what, boolean success) {

    this.message = what;

    this.success = success;

    }

    }

    注意GenericSpringEvent和CustomSpringEvent之间的区别。我们现在可以灵活地发布任何任意事件,并且不再需要从ApplicationEvent扩展。

    这样的话,我们无法像之前一样,通过继承ApplicationListener的方式来定义一个监听器,因为ApplicationListener定义了事件必须是ApplicationEvent的子类。所以,我们只能使用注解驱动的监听器。

    通过在@EventListener注释上定义布尔SpEL表达式,也可以使事件监听器成为条件。在这种情况下,只会为成功的String的GenericSpringEvent调用事件处理程序:

    @Component

    public class AnnotationDrivenEventListener {

    @EventListener(condition = "#event.success")

    public void handleSuccessful(GenericSpringEvent event) {

    System.out.println("Handling generic event (conditional).");

    }

    }

    定义具体类型的事件:

    public class StringGenericSpringEvent extends GenericSpringEvent {

    public StringGenericSpringEvent(String message, boolean success) {

    super(message, success);

    }

    }

    定义发布者:

    @Component

    public class StringGenericSpringEventPublisher {

    @Autowired

    private ApplicationEventPublisher applicationEventPublisher;

    public void doStuffAndPublishAnEvent(final String message, final boolean success) {

    System.out.println("CustomSpringEventPublisher Publishing custom event. ");

    StringGenericSpringEvent springEvent = new StringGenericSpringEvent(message, success);

    applicationEventPublisher.publishEvent(springEvent);

    }

    }

    测试类:

    @RunWith(SpringRunner.class)

    @SpringBootTest

    public class CustomSpringEventPublisherTest {

    @Autowired

    private StringGenericSpringEventPublisher publisher;

    @Test

    public void publishStringEventTest() {

    publisher.doStuffAndPublishAnEvent("success", true);

    publisher.doStuffAndPublishAnEvent("failed", false);

    }

    }

    运行结果:

    CustomSpringEventPublisher Publishing custom event.

    Handling generic event (conditional) success

    CustomSpringEventPublisher Publishing custom event.

    监听器只处理了成功的事件,成功忽略掉了失败的事件。这样的好处是,可以为同一个事件定义成功和失败不同的操作。

    Spring事件的事务绑定

    从Spring 4.2开始,框架提供了一个新的@TransactionalEventListener注解,它是@EventListener的扩展,允许将事件的侦听器绑定到事务的一个阶段。绑定可以进行以下事务阶段:

    AFTER_COMMIT(默认的):在事务成功后触发

    AFTER_ROLLBACK:事务回滚时触发

    AFTER_COMPLETION:事务完成后触发,不论是否成功

    BEFORE_COMMIT:事务提交之前触发

    总结

    Spring中处理事件的基础知识:创建一个简单的自定义事件,发布它,然后在监听器中处理它。

    在配置中启用事件的异步处理。

    Spring 4.2中引入的改进,例如注释驱动的侦听器,更好的泛型支持以及绑定到事务阶段的事件。

    展开全文
  • 简介事件(event)是MySQL在相应的时刻调用的过程式数据库对象,它由一个特定的线程来管理的,也就是所谓的 事件调度器。有两种调度方式。一次性的调用。周期性的调用。事件和触发器类似,都是在某些事情发生的时候...

    简介

    事件(event)是MySQL在相应的时刻调用的过程式数据库对象,它由一个特定的线程来管理的,也就是所谓的 事件调度器。

    有两种调度方式。

    一次性的调用。

    周期性的调用。

    事件和触发器类似,都是在某些事情发生的时候启动。当数据库上启动一条语句的时候,触发器就启动了,而事件是根据 调度事件 来启动的。由于他们彼此相似,所以事件也称为临时性触发器。

    MySQL事件跟Windows 和 Linux(crontab)系统中的定时任务很像,在特定的时间内执行任务。但是它们只能精确到分钟,而MySQL event 事件可以实现每秒都去执行任务。

    优缺点

    优点

    一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。

    可以实现每秒钟执行一个任务,这在一些对实时性要求较高的环境下就非常实用了。

    缺点

    定时触发,不可以调用。

    问题

    MySQL 的定时触发的event建好后没有发生预定的事件,归纳起来有以下几种:

    全局的event是关闭的;

    用户权限的修改导致event失效(这种情况很少发生);

    event 设成了DISABLE;

    解决方案

    下面来演示如何解决上面出现所出现的问题

    问题1 解决方案:

    临时修改 (不推荐)

    实际上MySQL的event默认值是off

    进入MySQL命令行模式

    查看event是否开启:show variables like 'event_scheduler';

    这时你会发现 event_scheduler 的值是 OFF

    mysql> show variables like 'event_scheduler';

    +-----------------+-------+

    | Variable_name | Value |

    +-----------------+-------+

    | event_scheduler | OFF |

    +-----------------+-------+

    临时开启 event 事件:set global event_scheduler=1;

    输入完上面的命令后在执行查看命令会发现 event_scheduler 的值变成了 ON 了。

    但是针对上面的操作方案个人是不推荐的。因为这只是临时的,当数据库重新启动的时候,以上方法就会失效,event_scheduler 的值会还原成默认值 OFF。

    通过修改配置文件的方式 (推荐)

    windows 系统的 MySQL的配置文件名是 my.ini ;Linux系统的 MySQL 的配置文件名是 my.cnf;

    打开配置文件在 [mysqld] 模块下添加 event_scheduler=on 或 event_scheduler=1;

    重新启动MySQL。

    问题 2 解决方案(暂未遇到过):

    这种情况很少发生,但发生后又找不到问题,那就看看你建的event所属者有没有这个执行权限吧。

    执行下面的SQL语句:

    -- 查看用户权限

    show grants for 'root'@'localhost';

    -- 会得到下面的结果, ALL 或者 ALL PRIVILEGES 代表全部的权限

    +---------------------------------------------------------------------+

    | Grants for root@localhost |

    +---------------------------------------------------------------------+

    | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |

    | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |

    +---------------------------------------------------------------------+

    修改 localhost 权限就可以了。

    问题 3 解决方案:

    event 设成了DISABLE 这种情况。

    -- 这里以test_event为例:

    -- 关闭事件任务:

    alter event test_event ON COMPLETION PRESERVE DISABLE;

    --开户事件任务:

    alter event test_event ON COMPLETION PRESERVE ENABLE;

    -- 获取当前数据库的event:

    show events;

    -- 获取全部的event:

    select * from information_schema.events;

    -- 下面通过 show events; 命令的出来的结果,event 事件的状态为 ENABLED

    +-----+----------+----------------+-----------+-----------+---------------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+

    | Db | Name | Definer | Time zone | Type | Execute at | Interval value | Interval field | Starts | Ends | Status | Originator | character_set_client | collation_connection | Database Collation |

    +-----+----------+----------------+-----------+-----------+---------------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+

    | api | test | root@localhost | SYSTEM | RECURRING | NULL | 1 | DAY | 2019-07-01 00:00:00 | NULL | ENABLED | 1 | utf8mb4 | utf8mb4_general_ci | utf8_general_ci |

    | api | test_one | root@localhost | SYSTEM | ONE TIME | 2019-07-01 00:00:00 | NULL | NULL | NULL | NULL | ENABLED | 1 | utf8mb4 | utf8mb4_general_ci | utf8_general_ci |

    +-----+----------+----------------+-----------+-----------+---------------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+

    参考

    展开全文
  • Laravel使用event事件

    2021-04-05 10:15:39
    在常见的业务中,比如我们要记录一个接口的最终处理结果记录到日志里,使用event就可以把记录日志的业务逻辑放在一个处理方法中,使得代码中的业务逻辑更明确。 二、配置监听 监听配置文件:app\...

    一、需求场景

    在常见的业务中,比如我们要记录一个接口的最终处理结果记录到日志里,使用event就可以把记录日志的业务逻辑放在一个处理方法中,使得代码中的业务逻辑更明确。

    二、配置监听

    监听配置文件:app\EventServiceProvider.php

    <?php
    
    namespace App\Providers;
    
    use Illuminate\Auth\Events\Registered;
    use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
    use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
    use App\Events\TestEvent;
    
    class EventServiceProvider extends ServiceProvider
    {
        /**
         * The event listener mappings for the application.
         *
         * @var array
         */
        protected $listen = [
    //        Registered::class => [
    //            SendEmailVerificationNotification::class,
    //        ],
            'App\Events\SendEvent' => [
    //            'App\Listeners\PayEventListener',
                'App\Listeners\SendEventListener',
            ],
        ];
    
        /**
         * Register any events for your application.
         *
         * @return void
         */
        public function boot()
        {
            parent::boot();
    
            //
        }
    }
    
    

    其中,$listen属性中:

    • App\Events\ArticleEvent:是在App\Events目录下新建一个事件(ArticleEvent.php),控制器等的业务逻辑中实例化的是该文件。

    • App\Listeners\PayEventListener:是在App\Listeners目录下新建一个监听器(PayEventListener.php)

    注意:单个事件可以配置多个监听器(处理业务逻辑,如发送邮件,发送短信)。

    配置多个监听器的写法:

        protected $listen = [
            'App\Events\SendEvent' => [
                'App\Listeners\SendEventListener',
                'App\Listeners\PayEventListener',
            ],
        ];
    

    表明一个调用ArticleEvent事件,会执行两个监听器。如果有多个监听器,会按照上方代码快中的数组下标依次进行处理。

    三、生成事件及监听文件

    执行命令:php artisan event:generate

    会在Events目录下生成SendEvent.php,在Listenters目录下生成SendEventListener.php两个文件。

    SendEvent.php(事件)中,用来接收调用端传过来的参数。

    <?php
    
    namespace App\Events;
    
    use Illuminate\Broadcasting\Channel;
    use Illuminate\Broadcasting\InteractsWithSockets;
    use Illuminate\Broadcasting\PresenceChannel;
    use Illuminate\Broadcasting\PrivateChannel;
    use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
    use Illuminate\Foundation\Events\Dispatchable;
    use Illuminate\Queue\SerializesModels;
    use Illuminate\Support\Facades\Log;
    
    class SendEvent
    {
        use Dispatchable, InteractsWithSockets, SerializesModels;
    
    
        /**
         * Create a new event instance.
         *
         * @return void
         */
        public function __construct()
        {
        }
    
        /**
         * Get the channels the event should broadcast on.
         *
         * @return \Illuminate\Broadcasting\Channel|array
         */
        public function broadcastOn()
        {
            return new PrivateChannel('channel-name');
        }
    }
    
    

    可以定义一个属性:

    <?php
    
    namespace App\Events;
    
    use Illuminate\Broadcasting\Channel;
    use Illuminate\Broadcasting\InteractsWithSockets;
    use Illuminate\Broadcasting\PresenceChannel;
    use Illuminate\Broadcasting\PrivateChannel;
    use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
    use Illuminate\Foundation\Events\Dispatchable;
    use Illuminate\Queue\SerializesModels;
    use Illuminate\Support\Facades\Log;
    
    class SendEvent
    {
        use Dispatchable, InteractsWithSockets, SerializesModels;
    
        public $name;
    
        /**
         * Create a new event instance.
         *
         * @param $username
         */
        public function __construct($username)
        {
            $this->name = $username; 
        }
    
        /**
         * Get the channels the event should broadcast on.
         *
         * @return \Illuminate\Broadcasting\Channel|array
         */
        public function broadcastOn()
        {
            return new PrivateChannel('channel-name');
        }
    }
    
    

    SendEventListener.php(监听器)中,可以通过$event->name来接收参数,从而进行相应的业务逻辑处理:

    <?php
    
    namespace App\Listeners;
    
    use App\Events\SendEvent;
    use Illuminate\Contracts\Queue\ShouldQueue;
    use Illuminate\Queue\InteractsWithQueue;
    use Illuminate\Support\Facades\Log;
    
    class SendEventListener
    {
        /**
         * Create the event listener.
         *
         * @return void
         */
        public function __construct()
        {
        }
    
        /**
         * Handle the event.
         *
         * @param  SendEvent  $event
         * @return void
         */
        public function handle(SendEvent $event)
        {
            echo $event->name; 
            Log::info('事件1监听测试'.date('Y-m-d H:i:s'));
        }
    }
    
    

    四、调用事件

    在控制器中,直接实例化事件类就行,也可以传相应的参数。:

    public function testEvent(){
    //        Log::info(date('Y-m-d H:i:s').'我进来了');
    		$username = '写代码的光头强';
            event(new SendEvent());
    //        Log::info(date('Y-m-d H:i:s').'我结束了');
        }
    

    至此,简单的event事件调用就实现了。以上都是带代码同步进行的。

    同步执行顺序:控制器——事件——监听器1——监听器2——控制器结束

    在这里插入图片描述
    如果使用异步,可以配合着队列来用。

    end~

    展开全文
  • linux4.9版本增加event事件上报流程1:先声明一个input_dev设备,并初始化为空。static struct input_dev* sif_input_dev = NULL;2:在驱动入口函数中申请input_dev设备空间。sif_input_dev = input_allocate_device...
  • 一、IE下event事件对象获取 区别: (1)非IE下event的值默认为undefined,而IE中event的值默认为null console.log(event); 非IE环境下: IE环境下(低版本10及其以下): (2)非IE下可以随意通过dom0或dom2中的...
  • 1.事件简介事件(event)是MySQL在相应的时刻调用的过程式数据库对象。一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”。事件和触发器类似,都是在某些事情发生的时候...
  • Qt Event事件详解

    2020-12-30 10:27:35
    一、简述 个人认为,事件机制是Qt最难以理解且最为精妙的一部分。事件主要分为两种: 在与用户交互时发生。比如按下鼠标...如果当前组件没有安装事件过滤器(这个下文会提到),则会被event函数发放到相应的
  • go实现Event事件

    2021-05-16 20:59:34
    go协程之间用通道通信,如何将它改造成事件形式。 需求描述 以下是我的需求 e := NewEvent() //协程1等待结果, 10是等待时间 e.Wait(10) //协程2发送结果 e.Send(xxxx) 原理 原理比较简单,不描述了 示例 package ...
  • 注:文章皆为个人纪录,可用性请以最终结果为准,若有错还请大佬们指出,谢谢! 使用场景: ... 注意: ... 事件监听处理在代码中为同步的串行执行,不要理解为异步处理,目的只是...1.1 定义事件的基类(MyBaseEve...
  • 先定义一个Event父类 package com.felix.event; import org.springframework.context.ApplicationEvent; public class BaseEvent extends ApplicationEvent { public BaseEvent(Object source) { super(source)...
  • ts react Event 事件对象类型

    千次阅读 2021-04-26 18:14:17
    Event 事件对象类型 ClipboardEvent<T = Element> 剪切板事件对象 DragEvent<T =Element> 拖拽事件对象 ChangeEvent<T = Element> Change 事件对象 KeyboardEvent<T = ...
  • 天萃荷净分享一篇关于捕捉Oracle会话中的EVENT的3种方法,使用dbms_system、oradebug、setospid/setorapid、.event 10046捕捉EVENT事件的方法很多时候,我们在数据库中设置了event,如何确认设置的event生效或者如何...
  • Qt中Event处理流程是本文要介绍的内容,主要是来了解Event事件的处理。在Qt/Embedded中,鼠标事件来自于触摸屏设备。在使用select读取触摸屏设备中的数据后(即采样,压力达到一定阈值),处理些采样点后得到一个物理...
  • 查看mysql事件状态是否开启mysql> show variables like 'event_scheduler';+-----------------+-------+| Variable_name | Value |+-----------------+-------+| event_scheduler | ON |+-----------------+-----...
  • SpringBoot Event事件同步、异步处理 业务需求场景:按照一定的顺序做一些事情,例如向A表插入数据事物提交之后,向B表中插入历史记录,最后向C表插入。 事件机制 事件监听机制可以理解为是一种观察者模式,有数据...
  • 我们自定义监听spring event通常有两种方式,先说下这两种方式,然后从两种方式的差异说明event的顺序。 @Component 实现 使用@Component方式实现如下: @Component @Slf4j public class ApplicationListenerImpl...
  • pageX与pageY概述:它们是事件对象属性,主要作用也是获取鼠标位置。是网页主题部分左上角为0点clientX与clinetY概述:主要作用,获取鼠标位置,是网页可视区部分左上角为0点。offsetX与offsetY概述:他们两者也是...
  • // 定义事件 public class EventDemo extends ApplicationEvent { private String message; public EventDemo(Object source, String message) { super(source); this.message = message; } public String...
  • [Java教程]Javascript 事件对象(一)event事件02014-06-12 00:00:41Event事件:1 2 3 4 5 无标题文档 6 7 /* 8 event : 事件对象 , 当一个事件发生的时候,和当前这个对象发生的这个事件有关的一些详细的信息都会被...
  • Spring Event 事件通知

    2020-12-30 11:04:12
    文章目录Spring Event 事件通知观察者模式Spring Event事件处理基于继承`ApplicationEvent`的Event基于注解`@EventListener`的Event源代码 Spring Event 事件通知 观察者模式 spring event的事件驱动模型是使用观察...
  • Spring publishevent事件处理

    千次阅读 2021-01-17 23:16:42
    这个一般什么时候使用,我们一般是在不同的bean直接进行信息传递,比如我们beanA的事件处理完后,需要beanB进行处理一些业务逻辑的时候这种情况就一般可以使用publish-event解决 原理 其实事件模型我们并不陌
  • Lua Event 事件

    2021-02-06 15:43:09
    1、Event.lua local M = {} M.list = nil M.eventName = nil function M:New(eventName) local o = {} setmetatable(o, self) self.__index = self o.list = {} o.eventName = eventName return o end -- ...
  • 前言 RT-Thread 的事件集(rt_event),... rt_event_detach : 当rt_event_init初始化的事件集不再使用时,脱离掉(反初始化),事件集变量还在,只是不能直接使用。 rt_event_create : 动态创建一个事件集,需要首.
  • 用这个API注册事件的回调函数lv_obj_set_event_cb,函数原形如下: 二. 事件类型 1.Related to the input devices LV_EVENT_PRESSEDThe object has been pressed(控件被按下) LV_EVENT_PRESSINGThe ...
  • 分别有liunx,js,php 现在学习一个mysql的定时执行-event事件:前言:自MySQL5.1.0起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录、对数据进行汇总...
  • LVGL笔记12--event事件

    2021-02-14 16:36:53
    也可以是由外部物理操作触发的,比如触摸,点击等等,当然了,我们也可以通过调用 lv_event_send 接口来手动发送事件进行触发,同时可以携带用户自定义的数据. Events的API接口 主要数据类型 事件数据类型 enum

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 802,792
精华内容 321,116
关键字:

event事件