簡介
背景
J2EE笨重的開發 / 繁多的配置 / 低下的開發效率 / 復雜的部署流程 / 第三方技術集成難度大
特點
①?快速創建獨立運行的spring項目以及主流框架集成
②?使用嵌入式的Servlet容器,?應用無需達成war包
③?starters自動依賴和版本控制
④?大量自動配置,?簡化開發,?也可修改默認值
⑤?無需配置xml文件,?無代碼生成,?開箱即用
⑥?準生產環境的運行時應用監控
⑦?與云計算的天然集成
微服務
推薦martinfowler的一篇博客譯文: http://blog.cuicc.com/blog/2015/07/22/microservices/
微服務是一種架構風格,?一個應用應該是一組小型服務,?可以通過http的方式進行互通.
以前的架構:?單體應用(ALL IN ONE)
微服務(Microservices):?每一個服務都是可替代可升級的軟件單元
每個服務之間通過http進行通信:
準備工作
JDK1.8
maven3.3.9
IDEA_2018
配置指定maven的全局JDK版本:?在setting.xml文件中的<profiles></profiles>標簽中
第一個例子
①?創建一個maven工程(jar)
②?導入spring boot相關的依賴
?③ 編寫一個主程序, 啟動Spring Boot應用
④?編寫相關的Controller
⑤?運行主程序測試,?訪問:?http://localhost:8080/hello
⑥?簡化部署(使用插件打成jar,?插件在pom文件中已給出)
探究
①?pom文件
? 父項目:
再依賴父項目:
管理Spring?Boot的所有依賴版本:?導入依賴默認是不需要寫上版本的(沒有在dependencies管理中的除外)
?②?導入的依賴
spring-boot-starter:?Spring?Boot的場景啟動器
spring-boot-starter-web:?幫我們導入了web模塊正常運行所依賴的組件
Spring?Boot將所有的功能場景都抽取出來,?做成一個個的starter(啟動器),?只需要在項目中引入這些starter,?要用哪個功能就導入具體的starter即可.
③?主程序類/主入口類
@SpringBootApplication注解,?該注解所標準的類即為SpringBoot的主配置類
? ? @SpringBootConfiguration
? ? ? ? @Configuration:?配置類上的注解
? ? ? ? ? ? @Component:?組件注解
? ? ? ? ? ? ? ? 配置類:?同配置文件的作用, 也是容器的組件.
? ? @EbableAutoConfiguration:?開啟自動注解功能
? ? ? ? @AutoConfigurationPackage:?自動配置包(自動導包)
? ? ? ? ? ? @Import({Registrar.class}):?Spring的底層注解,?給容器中導入一個組件
? ? ? ? 將主配置類(@SpringBootApplication標注的類)的所在包及下面所有子包的所有組件都掃描到容器中
? ? ? ? @Import({ AutoConfigurationImportSelector.class}):?導入具體組件的選擇器
? ? ? ? 將所有需要導入的組件以全類名的方式返回,?這些組件就會被添加到容器中.
? ? ? ? 會給容器中導入非常多的自動配置類(xxxAutoConfiguration):?給容器中導入這個場景需要組件并配置好這些組件.
? ? ? ? 有了自動配置類,?免去了手動編寫配置注入功能組件的工作.
? ??SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class, ClassLoader);
? ? ? ? 該方法從文件"META-INF/spring.factories"中獲取自動配置的類信息.
小結:?SpringBoot在啟動時從類路徑下的META-INF/spring.factories中獲取EnableAutoConfiguration指定的值,?將這些值作為自動配置類導入到容器中,?自動配置類就會生效,?進行自動配置工作,?所以并不是不需要進行以前的配置,?只是這些配置都由SpringBoot幫我們完成了. J2EE的整體整合解決方案和自動配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar
使用Spring?Initializr快速創建SpringBoot項目(需要聯網)
①?選擇Spring?Initializr
②?填寫信息
③?需要哪個模塊勾選哪個即可
④?next->finish
⑤?resources文件夾中的目錄結構
? ? static文件夾:?保存所有的靜態資源(js,?css...);
? ? templates文件夾:?保存所有的模板頁面(由于SpringBoot使用嵌入式的tomcat,?所以默認不支持jsp),?可以使用模板引擎? ? ? ? ? ? ? ? ? ? (freemarker/ thymeleaf)
? ? application.properties:?SpringBoot應用的配置文件(可以修改一些默認的設置)