如何玩轉(zhuǎn) SpringBoot 2 快速整合 Listener?針對這個問題,這篇文章詳細介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
創(chuàng)新互聯(lián)專注于漳州企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),商城系統(tǒng)網(wǎng)站開發(fā)。漳州網(wǎng)站建設(shè)公司,為漳州等地區(qū)提供建站服務(wù)。全流程定制制作,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)快速演示操作
第一步: 編寫 Listener 并且在 Listener 類上聲明 @WebListener 注解。具體代碼如下:
@WebListener public class ApplicationListener implements ServletContextListener{ private Logger log = LoggerFactory.getLogger(ApplicationListener.class); @Override public void contextInitialized(ServletContextEvent sce) { log.info("ApplicationListener 監(jiān)聽器啟動..."); } @Override public void contextDestroyed(ServletContextEvent sce) { log.info("ApplicationListener 監(jiān)聽器銷毀..."); } }
第二步:通過 JavaConfig 方式將編寫的 ApplicationListener 類注入到 Spring 的上下文中。
將自定義 ApplicationListener 傳入到 ServletListenerRegistrationBean的構(gòu)造中,然后創(chuàng)建 ServletListenerRegistrationBean Bean實例,具體代碼如下:
@Configuration public class WebApplicationConfig { @Bean public ServletListenerRegistrationBeanuserServlet(){ return new ServletListenerRegistrationBean (new ApplicationListener()); } }
或者在啟動類上聲明 @ServletComponentScan 注解,具體代碼如下:
@SpringBootApplication @ServletComponentScan public class SpringbootExamplesApplication { public static void main(String[] args) { SpringApplication.run(SpringbootExamplesApplication.class, args); } }
測試
啟動 SpirngBoot 項目會看到在 ApplicationListener 中定義 ApplicationListener 監(jiān)聽器銷毀… 日志信息。
2019-10-04 00:58:39.361 INFO 5184 --- [ restartedMain] o.s.b.w.servlet.ServletRegistrationBean : Servlet dispatcherServlet mapped to [/] 2019-10-04 00:58:39.375 INFO 5184 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 2019-10-04 00:58:39.376 INFO 5184 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 2019-10-04 00:58:39.376 INFO 5184 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'formContentFilter' to: [/*] 2019-10-04 00:58:39.377 INFO 5184 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*] 2019-10-04 00:58:39.420 INFO 5184 --- [ restartedMain] c.lijunkui.listener.ApplicationListener : ApplicationListener 監(jiān)聽器啟動...
在啟動狀態(tài)下在此啟動該項目,雖然會報錯但是可以看到在ApplicationListener 中定義銷毀的日志信息輸出。
Caused by: java.net.BindException: Address already in use: bind at sun.nio.ch.Net.bind0(Native Method) ~[na:1.8.0_144] at sun.nio.ch.Net.bind(Net.java:433) ~[na:1.8.0_144] at sun.nio.ch.Net.bind(Net.java:425) ~[na:1.8.0_144] at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) ~[na:1.8.0_144] at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) ~[na:1.8.0_144] at org.apache.tomcat.util.net.NioEndpoint.initServerSocket(NioEndpoint.java:236) ~[tomcat-embed-core-9.0.12.jar:9.0.12] at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:210) ~[tomcat-embed-core-9.0.12.jar:9.0.12] at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:1108) ~[tomcat-embed-core-9.0.12.jar:9.0.12] at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:550) ~[tomcat-embed-core-9.0.12.jar:9.0.12] at org.apache.catalina.connector.Connector.startInternal(Connector.java:957) ~[tomcat-embed-core-9.0.12.jar:9.0.12] ... 19 common frames omitted 2019-10-04 01:01:07.860 INFO 7864 --- [ restartedMain] o.apache.catalina.core.StandardService : Stopping service [Tomcat] 2019-10-04 01:01:07.863 INFO 7864 --- [ restartedMain] c.lijunkui.listener.ApplicationListener : ApplicationListener 監(jiān)聽器銷毀... 2019-10-04 01:01:07.876 INFO 7864 --- [ restartedMain] ConditionEvaluationReportLoggingListener :
小結(jié)
SpringBoot 中整合 Listener步驟如下:
需要在Listener上聲明 @WebListener
在啟動類上聲明@ServletComponentScan注解或者將
Listener通過ServletListenerRegistrationBean 進行包裝然后通過 JavaConfig
方式將其注入到Spring上下文中。
代碼示例
我本地環(huán)境如下:
SpringBoot Version: 2.1.0.RELEASE
Apache Maven Version: 3.6.0
Java Version: 1.8.0_144
IDEA:Spring Tools Suite (STS)
關(guān)于如何玩轉(zhuǎn) SpringBoot 2 快速整合 Listener問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。