我打算用一篇文章講一下Spring

參考Spring實現和SpringAction

最初我們可以在一個main方法中利用
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(“applicationContext.xml”);
啓動一個Spring容器
裏面我們一般配備了很多的bean的name和路徑,Spring去掃描解析並加載生成這些bean

慢慢的我們發現xml太費事了,我們使用Java Config來寫配置,這也是SpringBoot的基礎
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.scan(“com.xxx”);
context.refresh();

最後衍生出了SpingBoot,我們常用一下代碼啓動一個Spring容器。
ConfigurableApplicationContext context = SpringApplication.run(Main.class, args);

除了最後一個SpringBoot的,其實我們很少見上面的兩種寫法,因爲我們常常和Servlet規範一起使用
需要再web.xml中配置

contextConfigLocation
/WEB-INF/classes/applicationContext-*.xml


org.springframework.web.context.ContextLoaderListener

https://www.cnblogs.com/duanxz/p/5074584.html
用監聽器的方式去監聽servlet容器的啓動,進而啓動spring
如果使用SpringMVC的話,還需要配置

simpleSpringMVC/servlet-name>
org.springframework.web.servlet.DispatchServlet
1


simpleSpringMVC
*.htm

這段加載了Spring 的配置文件,初始化上下文。ContextLoaderListener是一個實現了ServletContextListener接口的監聽器,在項目啓動時觸發 contextInitialized 方法(該方法主要完成ApplicationContext對象的創建),在關閉項目時會觸發 contextDestroyed 方法(該方法會執行ApplicationContext的清理操作)

啓動項目時觸發contextInitialized 方法,該方法就做一件事,通過父類contextLoader的initWebApplicationContext 方法創建Spring上下文對象(ApplicationContext對象);
initWebApplicationContext 方法做了三件事:
    創建WebApplicationContext;
    加載對應的Spring文件創建的Bean實例;
    講WebApplicationContext放入ServletContext(既javaweb的全局變量中)。
createWebApplicationContext 創建上下文對象,支持用戶自定義的上下文對象,但必須繼承自ConfigurableWebApplicationContext,而Spring MVC默認使用 ConfigurableWebApplicationContext 作爲 ApplicationContext(它是一個接口的繼承)。真正的實現類是XmlWebApplicationContext
configureAndRefreshWebApplicationContext 方法用於封裝Application數據並且初始化所有相關的Bean對象。它會從web.xml中讀取名爲 contextConfigLocation 的配置,這就是 Spring xml 數據源的設置,然後放到ApplicationContext中,最後調用傳說中的 refresh 方法執行所有java對象的創建。實際實現類是XMLWebApplicationContext
完成ApplicationContext創建之後就是將其放入ServletContext中,注意它存儲的key值常量。

以及父子容器:
https://blog.csdn.net/dhaiuda/article/details/80026354

各個擴展點和鉤子函數,bean加載流程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章