前言
講解Spring之前,我們首先梳理下Spring有哪些知識點可以進行入手原始碼分析,比如:
- Spring IOC依賴注入
- Spring AOP切面編程
- Spring Bean的宣告周期底層原理
- Spring 初始化底層原理
- Spring Transaction事務底層原理
Hello World
通過這些知識點,后續我們慢慢在深入Spring的使用及原理剖析,為了更好地理解Spring,我們需要先了解一個最簡單的示例——Hello World,在學習任何框架和語言之前,Hello World都是必不可少的,
//在以前大家都是spring.xml進行注入bean后供Spring框架決議
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
UserService userService = (UserService) context.getBean("userService");
userService.test();
spring.xml中的內容為:
<context:component-scan base-package="com.zhouyu"/>
<bean id="userService" />
如果對上面的代碼或者xml形式很陌生,再看下面一種代碼,也是目前流行的一種形式
//通過我們的配置類進行注入bean并決議
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MySpringConfig.class);
//ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
UserService userService = (UserService) context.getBean("userService");
userService.test()
MySpringConfig中的內容為:
@ComponentScan("com.xiaoyu")
public class MySpringConfig {
@Bean
public UserService userService(){
return new UserService();
}
}
相信很多人都會對上面的代碼不陌生,那我們來看下這三行代碼都做了那些作業:
- 構造一個ClassPathXmlApplicationContext類決議組態檔 或者AnnotationConfigApplicationContext類 決議配置類,那么呼叫該構造方法除開會實體化得到一個物件,還會做哪些事情?
- 從context中獲取一個名字為"userService"的userService物件,那么為什么輸入一個字串就可以得到物件呢,好像跟Map<String,Object>有些類似,getBean()又是如何實作的?回傳的UserService物件和我們自己直接new的UserService物件有區別嗎?
- 通過獲取到的UserService物件呼叫test方法,這個不難理解,
雖然我們目前很少直接使用這種方式來使用Spring,而是使用Spring MVC或者Spring Boot,但是它們都是基于上面這種方式的,都需要在內部去創建一個
ApplicationContext的,只不過:
- Spring MVC創建的是XmlWebApplicationContext,和ClassPathXmlApplicationContext類似,都是基于XML配置的
- Spring Boot創建的是AnnotationConfigApplicationContext
根據上面這三步我們大概找到了進行原始碼深入的方向,本章只是簡單講解下如何簡單使用Spring,先對這些流程有個印象,并帶著疑惑來進一步探究Spring的內部機制,好了,今天就講到這里,我是小雨,我們下期再見,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/549565.html
標籤:其他
上一篇:Java 例外處理:使用和思考
