spring事件机制实例(spring事件机制详解)

技术Spring的事件机制知识点有哪些这篇文章主要讲解了“Spring的事件机制知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring的事件机制知识点有哪

本文主要讲解“Spring的事件机制有哪些知识点”。本文的解释简单明了,易学易懂。请大家跟随边肖的思路,一起学习学习《春天的事件机制有哪些知识点》!

00-1010同步事件:在一个线程中,按顺序执行业务,先做一件事再做下一件事。

异步事件:在一个线程中,做一件事的同事可以启动一个新的线程来执行另一件事,这样就可以同时执行两件事。

用一个例子来解释同步事件和异步事件的使用场景。有时,一段完整的代码逻辑可能被分成几个部分。以最常见的注册为例,假设完整的流程为:1。点击注册-2。检查信息共存库-3。发送电子邮件通知-4。把它还给用户。代码写得正确,但不是最好的。缺点如下:

逻辑复杂,业务耦合。我们已经将验证数据共存库和发送电子邮件写入了一个大的业务方法。发邮件可以算是一种相对独立的商业方式。

效率低下,假设2和3分别用1秒,用户点击Register后2秒才能看到响应。

同步事件可以解决上面的第一个问题。我们把email方法分离出来放入事件中执行,这样注册的方法只能做2个操作,完成后再发出一个事件执行3个,可以很好的解决业务耦合的问题。

异步事件可以完美解决以上两个问题。注册方法执行2个操作后,发出一个异步事件,另一个线程执行3个操作。注册方式所在的线程可以直接返回给用户,既实现了业务解耦,又提高了效率。用户可以通过点击注册在1秒后看到响应。

同步事件和异步事件

Spring事件发送和监控涉及三个部分。

事件:表示事件本身。自定义事件需要继承此类,并可用于传输数据。例如,对于上述操作,我们需要将用户的电子邮件地址传递给事件侦听器。

ApplicationEventPublisherAware:事件发送器,通过实现这个接口触发事件。

应用程序侦听器:事件侦听器接口,事件的业务逻辑封装在侦听器中。

接下来,我们使用spring的异步事件机制来模拟上面的注册过程。有两种方式:配置文件和注释。

使用配置文件创建事件:

新建TestEvent:

public class testeventextendsaapplicationevent {

privateTestParamsource

public TestEvent(TestparamSource){ 0

super(来源);

this.source=source

}

}

@数据

publicclassTestParam{

privateStringemail

}新建TestListener:

@组件

publicclass testlistener implessapsapplicationlisteneretestevent {

@覆盖

public votinationapplicationevent(TestEventtestEvent){ 0

TestParam param=(TestParam)testevent . getsource();

System.out.println('.....

始.......");
         System.out.println("发送邮件:"+param.getEmail());
         System.out.println(".......结束.....");
     }
 }

新建 EventPublisher:

@Component
public class TestPublish implements ApplicationEventPublisherAware {

    private static ApplicationEventPublisher applicationEventPublisher;

    @Override
    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
        TestPublish.applicationEventPublisher = applicationEventPublisher;
    }

    public static void  publishEvent(ApplicationEvent communityArticleEvent) {
        applicationEventPublisher.publishEvent(communityArticleEvent);
    }
}

spring-context.xml中添加:

  <bean id="applicationEventAsyncMulticaster" class="org.springframework.context.event.SimpleApplicationEventMulticaster">
         <property name="taskExecutor">
             <bean class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
                 <property name="corePoolSize" value="5"/>
                 <property name="keepAliveSeconds" value="3000"/>
                 <property name="maxPoolSize" value="50"/>
                 <property name="queueCapacity" value="200"/>
             </bean>
         </property>
     </bean>

注意:如果加<propery name="taskExecutor",则使用异步方式执行,否则为同步方式

使用注解方式创建事件

使用 @Async 需要在配置文件添加一下支持,线程池也是需要配置一下的

<!-- 开启@AspectJ AOP代理 -->
    <aop:aspectj-autoproxy proxy-target-class="true"/>

    <!-- 任务执行器 -->
    <task:executor id="executor" pool-size="10"/>

    <!--开启注解调度支持 @Async -->
    <task:annotation-driven executor="executor" proxy-target-class="true"/>

TestListener中在方法中添加@Async

 @Component
 public class TestListener implements ApplicationListener<TestEvent> {
 
     @Async
     @Override
     public void onApplicationEvent(TestEvent testEvent) {
 
         TestParam param = (TestParam) testEvent.getSource();
         System.out.println(".......开始.......");
         System.out.println("发送邮件:"+param.getEmail());
         System.out.println(".......结束.....");
     }
 }

Listener其实还可以做得更彻底一点,使用注解@EventListener可代替实现ApplicationListener,原理是通过扫描这个注解来创建监听器并自动添加到ApplicationContext中.

新建自定义EventHandler:

 @Component
 public class TestEventHandler {
 
     @Async
     @EventListener
     public void handleTestEvent(TestEvent testEvent) {
 
         TestParam param = (TestParam) testEvent.getSource();
         System.out.println(".......开始.......");
         System.out.println("发送邮件:"+param.getEmail());
         System.out.println(".......结束.....");
     }
 }

测试及控制台的打印就不贴了,这里主要记录一下具体的实现方法.

感谢各位的阅读,以上就是“Spring的事件机制知识点有哪些”的内容了,经过本文的学习后,相信大家对Spring的事件机制知识点有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/153084.html

(0)

相关推荐

  • Collection集合-List-Set

    技术Collection集合-List-Set Collection集合-List-Set两大体系1.Collection集合-List-Set2.Map集合核心1.ArrayList 2.HashMa

    礼包 2021年12月7日
  • java文件流接口和下载的方法是什么

    技术java文件流接口和下载的方法是什么本篇内容介绍了“java文件流接口和下载的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅

    攻略 2021年11月16日
  • 幂的乘方50道计算题,初一解方程计算题有过程答案

    技术幂的乘方50道计算题,初一解方程计算题有过程答案1。某中学修整草场,如果让初一学生单独工作,需要7。5小时完成;如果让初二学生单独做,需要5小时完成。如果让初一幂的乘方50道计算题、初二学生一起工作1小时,再由初二学

    生活 2021年10月22日
  • Spring Boot:整合knife4j

    技术Spring Boot:整合knife4j Spring Boot:整合knife4j前言
    这玩意就swagger的升级版,但是用起来比swagger舒服些,界面也看着好看。
    knife4j是为Ja

    礼包 2021年12月18日
  • 对长亭晚,杯杯敬的有钱人这一首诗什么诗

    技术对长亭晚,杯杯敬的有钱人这一首诗什么诗《诗经》死生契阔对长亭晚,与子成说。执子之手,与子偕老。《邶风·击鼓》
    今夕何夕,见此良人。《唐风·绸缪》
    青青子衿,悠悠我心。《郑风·子衿》
    手如柔荑,肤如凝脂,领如蝤蛴,齿如

    生活 2021年10月29日
  • 抖音刷赞软件-在线刷抖音播放量

    技术抖音刷赞软件-在线刷抖音播放量抖音刷赞软件-在线刷抖音播放量
    行骗者猖獗之外,问题的背面,亦存在“热门造假”的公开秘密。同被套路的大四学生侯明明的心态具备一定代表性,她直言自己放松警惕心的原因:“现在好多热门都是刷的

    测评 2021年11月13日