浅谈Spring事件机制,腾讯T3大牛手把手教你

2021年09月15日 阅读数:1
这篇文章主要向大家介绍浅谈Spring事件机制,腾讯T3大牛手把手教你,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。
    TestParam param = (TestParam) testEvent.getSource();

    System.out.println(".......开始.......");

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

    System.out.println(".......结束.....");

}

}git


TestPublish

@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


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"/>缓存

<!-- 任务执行器 -->markdown

<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中。

TestListenerHandler

@Component

public class TestEventHandler {

@Async

@EventListener

public void handleTestEvent(TestEvent testEvent) {

    TestParam param = (TestParam) testEvent.getSource();

    System.out.println(".......开始.......");

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

写在最后

CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】

还有一份JAVA核心知识点整理(PDF):JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算...

image