SpringBoot開發(fā)中的組件和容器詳解
Web原生組件
Web原生組件包括: Servlet、Filter、Listener等
相關(guān)使用
// 指定原生Servlet組件都放在那里
@ServletComponentScan(basePackages = "com.cf.admin")
// 效果:直接響應(yīng),沒有經(jīng)過Spring的攔截器
@WebServlet(urlPatterns = "/my")
@WebFilter(urlPatterns={"/css/*","/images/*"})
@WebListener關(guān)于DispatchServlet 如何注冊:
- 容器中自動配置了 DispatcherServlet 屬性綁定到 WebMvcProperties;對應(yīng)的配置文件配置項是 spring.mvc
- 通過 ServletRegistrationBean <DispatcherServlet> 把 DispatcherServlet 配置進來
- 默認映射的是 / 路徑
Tomcat-Servlet中 多個Servlet都能處理到同一層路徑,精確優(yōu)選原則
- /my/
- /my/1
RegistrationBean使用
ServletRegistrationBean , FilterRegistrationBean , and ServletListenerRegistrationBean
@Configuration
public class MyRegistConfig {
@Bean
public ServletRegistrationBean myServlet(){
MyServlet myServlet = new MyServlet();
return new ServletRegistrationBean(myServlet,"/my","/my02");
}
@Bean
public FilterRegistrationBean myFilter(){
MyFilter myFilter = new MyFilter();
// return new FilterRegistrationBean(myFilter,myServlet());
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(myFilter);
filterRegistrationBean.setUrlPatterns(Arrays.asList("/my","/css/*"));
return filterRegistrationBean;
}
@Bean
public ServletListenerRegistrationBean myListener(){
MySwervletContextListener mySwervletContextListener = new MySwervletContextListener();
return new ServletListenerRegistrationBean(mySwervletContextListener);
}
}Servlet容器
切換Servlet
- Spring Boot默認支持的webServer容器:
- Tomcat , Jetty , or Undertow ServletWebServerApplicationContext 容器啟動尋找ServletWebServerFactory 并引導創(chuàng)建服務(wù)器
相關(guān)依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>使用原理:
- SpringBoot應(yīng)用啟動發(fā)現(xiàn)當前是Web應(yīng)用。web場景包-導入tomcat
- web應(yīng)用會創(chuàng)建一個web版的ioc容器 ServletWebServerApplicationContext
- ServletWebServerApplicationContext 啟動的時候?qū)ふ?ServletWebServerFactory(Servlet 的web服務(wù)器工廠—> Servlet 的web服務(wù)器)
- SpringBoot底層默認有很多的WebServer工廠;TomcatServletWebServerFactory, JettyServletWebServerFactory, or UndertowServletWebServerFactory
- 底層直接會有一個自動配置類。ServletWebServerFactoryAutoConfiguration
- ServletWebServerFactoryAutoConfiguration導入了ServletWebServerFactoryConfiguration(配置類)
- ServletWebServerFactoryConfiguration 配置類 根據(jù)動態(tài)判斷系統(tǒng)中到底導入了那個Web服務(wù)器的包。(默認是web-starter導入tomcat包),容器中就有 TomcatServletWebServerFactory
- TomcatServletWebServerFactory 創(chuàng)建出Tomcat服務(wù)器并啟動;TomcatWebServer 的構(gòu)造器擁有初始化方法initialize---this.tomcat.start();
- 內(nèi)嵌服務(wù)器,就是手動把啟動服務(wù)器的代碼調(diào)用(tomcat核心jar包存在)
定制Servlet容器
1 實現(xiàn) WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> 把配置文件的值和ServletWebServerFactory 進行綁定
2 修改配置文件servce.xxx, 直接自定義 ConfigurableServletWebServerFactory
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.stereotype.Component;
@Component
public class CustomizationBean implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {
@Override
public void customize(ConfigurableServletWebServerFactory server) {
server.setPort(9000);
}
}到此這篇關(guān)于SpringBoot開發(fā)中的組件和容器詳解的文章就介紹到這了,更多相關(guān)SpringBoot組件和容器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot+Vue項目部署上線的實現(xiàn)示例
本文主要介紹了SpringBoot+Vue項目部署上線的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-02-02
如何解決SpringBoot定時任務(wù)報錯Unexpected error occurred 
這篇文章主要介紹了如何解決SpringBoot定時任務(wù)報錯Unexpected error occurred in scheduled task問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
解決RabbitMq消息隊列Qos?Prefetch消息堵塞問題
這篇文章主要為大家介紹了關(guān)于如何解決解決RabbitMq?Qos?Prefetch消息堵塞的問題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-01-01
Windows7下的Java運行環(huán)境搭建過程圖解
這篇文章主要介紹了Windows7下的Java運行環(huán)境搭建過程圖解,需要的朋友可以參考下2014-04-04
java同一個類中,一個無事務(wù)方法調(diào)用一個有事務(wù)方法時,事務(wù)失效問題
本文詳細介紹了Spring框架中事務(wù)管理的實現(xiàn)原理,包括@Transactional注解的使用、事務(wù)的開啟、提交和回滾機制,以及代理對象的兩種實現(xiàn)方式(JDK動態(tài)代理和CGLIB代理),文章還探討了在同一個類中調(diào)用有事務(wù)方法時事務(wù)失效的原因,并提供了解決方法2024-12-12

