02_SpringBoot入門

02_SpringBoot入門

1阅悍、簡介

簡化Spring應(yīng)用開發(fā)的一個框架附鸽。
整個Spring技術(shù)棧的一個大整合屯断。
J2EE開發(fā)的一站式解決方案文虏。

  • SpringBoot來簡化Spring應(yīng)用開發(fā),約定大于配置殖演,去繁從簡氧秘,just run就能創(chuàng)建一個獨立的,產(chǎn)品級別的應(yīng)用趴久。
  • 優(yōu)點:
  1. 快速創(chuàng)建獨立運行的Spring項目以及與主流框架的集成丸相。
  2. 使用嵌入的Servlet容器,應(yīng)用無需打成jar包彼棍。
  3. starters自動依賴與版本控制灭忠。
  4. 大量的自動配置,簡化開發(fā)座硕,也可以修改默認值弛作。
  5. 無序配置xml文件,無代碼生成华匾,開箱即用映琳。
  6. 準生產(chǎn)環(huán)境的運行時應(yīng)用監(jiān)控。
  7. 與云計算的天然集成。
  • 缺點:
  1. 入門容易萨西,精通難有鹿。
  2. 需要掌握spring技術(shù)。

2原杂、微服務(wù)

2014年印颤,martin fowler在博客中提出。
微服務(wù)是一種架構(gòu)風格
一個應(yīng)用應(yīng)該是一組小型服務(wù)穿肄∧昃郑可以通過HTTP的方式進行互通。

單體應(yīng)用

一個單體應(yīng)用程序把他所有的功能放在一個單一進程中咸产。矢否。。并且通過在多個服務(wù)器上復制這個單體進行擴展

微服務(wù)

一個微服務(wù)架構(gòu)把每個功能元素放進一個獨立的服務(wù)中脑溢。僵朗。。并且通過跨服務(wù)器分發(fā)這些服務(wù)進行擴展屑彻,只在需要時才復制验庙。

每一個功能元素最終都是一個可獨立替換獨立升級的軟件單元。
詳細參照微服務(wù)提出者的網(wǎng)站社牲。


3粪薛、環(huán)境準備

掌握以下內(nèi)容:

  • Spring框架的使用經(jīng)驗
  • 熟練使用Maven進行項目構(gòu)建和管理依賴
  • 熟練使用Eclipse或者IDEA

環(huán)境約束:

  • JDK1.8
  • maven3.X
  • IDEA 2017
  • Spring Boot 1.5.9RELEASE

4、SpringBoot HelloWorld

  1. 創(chuàng)建Maven工程(jar的形式)

  2. 導入springboot相關(guān)依賴

    <?xml version="1.0" encoding="UTF-8"?>
     <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>org.springframework</groupId>
        <artifactId>gs-spring-boot</artifactId>
        <version>0.1.0</version>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.4.RELEASE</version>
        </parent>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
     <!--可以將應(yīng)用打包成可執(zhí)行的jar包-->
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
  3. 編寫一個主程序

    @SpringBootApplication // 標注主程序類搏恤,說明是一個SpringBoot應(yīng)用
    public class Application {
    
        public static void main(String[] args) {
            // 啟動Spring應(yīng)用
            SpringApplication.run(Application.class,args);
        }
    
    }
    
  1. 編寫相關(guān)的Controller违寿、Service等。

    這里只給出Controller熟空。Service返回一個字符串即可藤巢。

    @Controller
    public class HelloController {
    
        @Autowired
        private HelloService service;
    
        @RequestMapping("/hello")
        @ResponseBody
        public String hello(){
            return service.sayhello();
        }
    
    }
    
  2. 運行:

    只需要運行主類(Application)即可。

  3. 簡化部署工作

    只需要打Jar包息罗,然后用java -jar 指定jar包掂咒,即可訪問項目。


5迈喉、原理分析

  1. pom文件

    • 父項目

      <parent>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-parent</artifactId>
         <version>2.1.4.RELEASE</version>
      </parent>
      

      這個父項目還依賴了一個父項目:

      <parent>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-dependencies</artifactId>
          <version>2.1.4.RELEASE</version>
          <relativePath>../../spring-boot-dependencies</relativePath>
      </parent>
      

      這個父項目真正管理SpringBoot應(yīng)用里面所有的依賴版本俏扩。

      SpringBoot的版本仲裁中心

      以后我們導入依賴默認是不需要寫版本的弊添;

      (沒有在dependencies里面管理的依賴自然需要聲明版本號)

    • 啟動器

      <dependencies>
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-web</artifactId>
          </dependency>
      </dependencies>
      

      spring-boot-starter-web:spring-boot場景啟動器录淡;幫我們導入了web模塊正常運行所依賴的組件。

      通過導入各種starter(啟動器)來適應(yīng)所有功能場景油坝。

  2. 主程序類嫉戚、主入口類

    @SpringBootApplication // 標注主程序類刨裆,說明是一個SpringBoot應(yīng)用
    public class Application {
    
        public static void main(String[] args) {
            // 啟動Spring應(yīng)用
            SpringApplication.run(Application.class,args);
        }
    
    }
    

    @SpringBootApplication : 標注在某個類上說明這個類是SpringBoot的主配置類,SpringBoot就應(yīng)該運行這個類的main方法來啟動SpringBoot應(yīng)用彬檀。

    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @SpringBootConfiguration
    @EnableAutoConfiguration
    @ComponentScan(excludeFilters = {
         @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
         @Filter(type = FilterType.CUSTOM,
                 classes = AutoConfigurationExcludeFilter.class) })
    public @interface SpringBootApplication {
    

    @SpringBootConfiguration:SpringBoot的配置類帆啃;標注在某個類上,表示這是個SpringBoot的配置類窍帝;

    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Configuration
    public @interface SpringBootConfiguration {
    

    點進去@SpringBootConfiguration發(fā)現(xiàn)努潘,@SpringBootConfiguration上面有個@Configuration注解,配置類上使用的注解坤学,配置類--->配置文件疯坤;

    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Component
    public @interface Configuration {
    

    再點擊@Configuration進去發(fā)現(xiàn),他有一個@Component注解深浮,配置類也是容器中的一個組件压怠;

再看第二個注解:@EnableAutoConfiguration:開啟自動配置功能;以前需要我們自己去配置的東西飞苇,SpringBoot幫我們自動配置菌瘫;這個注解告訴SpringBoot開啟自動配置,只有寫了這個注解布卡,自動配置才會生效雨让。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

點進去里面

@AutoConfigurationPackage:自動配置包,點進去發(fā)現(xiàn)有個@Import(AutoConfigurationPackages.Registrar.class):Spring底層注解@Import忿等,給容器中導入一個組件AutoConfigurationPackages.Registrar.class

@AutoConfigurationPackage這個注解的作用是將主配置類(@SpringBootApplication標注的類)的所在的包及下面的所有子包下所有的組件掃描到Spring容器宫患。

而這個注解下還有一個@Import(AutoConfigurationImportSelector.class)注解,導入哪些組件的選擇器这弧,會將所有需要導入的組件以全限定名的方式返回,這些組件就會被掃描進Spring容器虚汛。最終會給容器導入非常多的自動配置類(XxxAutoConfiguration)匾浪,作用是給容器中導入這個場景需要的所有組件,并配置好這些組件卷哩。

SpringFactoryLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader):SpringBoot在啟動的時候蛋辈,會從從類路徑下的META-INF/spring.factories中獲取EnableAutoConfiguration指定的值,將這些值作為自動配置類導入到容器中将谊,自動配置類就會生效冷溶,幫我們進行自動配置工作。以前我們需要自己配置的東西尊浓,自動配置類都幫我們做了逞频。

J2EE的整體解決方案和自動配置都在spring-boot-autoconfigure-1.5.9RELEASE.jar中;


6栋齿、使用Spring Initializer快速創(chuàng)建SpringBoot項目

RESTAPI的方式:可以在類上打@Controller以及@ResponseBody苗胀,但是可以用@RestController來替換襟诸;

默認生成的SpringBoot項目有幾個特點:

  • 主程序已經(jīng)生成好了,我們只需要編寫我們自己的邏輯
  • resources文件夾目錄結(jié)構(gòu):
    • static:保存所有的靜態(tài)資源:js css images;
    • templates:保存所有的模板頁面:(SpringBoot默認jar包使用嵌入式的Tomcat基协,默認不支持JSP頁面)歌亲,可以使用模板引擎(freemarker、thymeleaf)澜驮;
    • application.properties:SpringBoot應(yīng)用的配置文件 -> 可以用來修改默認配置信息陷揪。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市杂穷,隨后出現(xiàn)的幾起案子悍缠,更是在濱河造成了極大的恐慌,老刑警劉巖亭畜,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拴鸵,居然都是意外死亡,警方通過查閱死者的電腦和手機劲藐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來聘芜,“玉大人,你說我怎么就攤上這事汰现。” “怎么了瞎饲?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長嗅战。 經(jīng)常有香客問我,道長驮捍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任东且,我火速辦了婚禮,結(jié)果婚禮上珊泳,老公的妹妹穿的比我還像新娘囤踩。我一直安慰自己,他們只是感情好晓褪,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著涣仿,像睡著了一般勤庐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上好港,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天愉镰,我揣著相機與錄音,去河邊找鬼钧汹。 笑死丈探,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的拔莱。 我是一名探鬼主播碗降,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼塘秦!你這毒婦竟也來了讼渊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤尊剔,失蹤者是張志新(化名)和其女友劉穎爪幻,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體须误,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡挨稿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了京痢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奶甘。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖历造,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情船庇,我是刑警寧澤吭产,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站鸭轮,受9級特大地震影響臣淤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜窃爷,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一邑蒋、第九天 我趴在偏房一處隱蔽的房頂上張望姓蜂。 院中可真熱鬧,春花似錦医吊、人聲如沸钱慢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽束莫。三九已至,卻和暖如春草描,著一層夾襖步出監(jiān)牢的瞬間览绿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工穗慕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留饿敲,地道東北人怀各。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓渠啤,卻偏偏與公主長得像添吗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子妓美,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容