色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

深度盤點(diǎn)一遍自動(dòng)裝配原理(上)

jf_78858299 ? 來源:Java知音 ? 作者: Object ? 2023-04-07 11:18 ? 次閱讀

前言

Spring翻譯為中文是“春天”,的確,在某段時(shí)間內(nèi),它給Java開發(fā)人員帶來過春天,但是隨著我們項(xiàng)目規(guī)模的擴(kuò)大,Spring需要配置的地方就越來越多,夸張點(diǎn)說,“配置兩小時(shí),Coding五分鐘”。這種紛繁復(fù)雜的xml配置隨著軟件行業(yè)一步步地發(fā)展,必將逐步退出歷史舞臺(tái)。


SpringBoot介紹

來自:百度百科

Spring Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來簡化新Spring應(yīng)用的初始搭建以及開發(fā)過程。該框架使用了特定的方式來進(jìn)行配置,從而使開發(fā)人員不再需要定義樣板化的配置。通過這種方式,Spring Boot致力于在蓬勃發(fā)展的快速應(yīng)用開發(fā)領(lǐng)域(rapid application development)成為領(lǐng)導(dǎo)者。

SpringBoot所具備的特征有:

  • 可以創(chuàng)建獨(dú)立的Spring應(yīng)用程序,并且基于其Maven或Gradle插件,可以創(chuàng)建可執(zhí)行的JARs和WARs;
  • 內(nèi)嵌Tomcat或Jetty等Servlet容器;
  • 提供自動(dòng)配置的“starter”項(xiàng)目對(duì)象模型(POMS)以簡化Maven配置;
  • 盡可能自動(dòng)配置Spring容器;
  • 提供準(zhǔn)備好的特性,如指標(biāo)、健康檢查和外部化配置;
  • 絕對(duì)沒有代碼生成,不需要XML配置。

自己的理解:

SpringBoot,顧名思義,給人的感覺就是讓Spring啟動(dòng)的這么一個(gè)項(xiàng)目。在過去,我們要讓一個(gè)Spring項(xiàng)目啟動(dòng),往往需要配置很多的xml配置文件,但是在使用SpringBoot之后,我們甚至無需寫一行xml,就可以直接將整個(gè)項(xiàng)目啟動(dòng),這種“零配置”的做法減輕了開發(fā)人員很多的工作量,可以讓開發(fā)人員一心撲在業(yè)務(wù)邏輯的設(shè)計(jì)上,使項(xiàng)目的邏輯更加完善。

除此之外,其采用了JavaConfig的配置風(fēng)格,導(dǎo)入組件的方式也由原來的直接配置改為@EnableXXXX,這種純Java代碼的配置和導(dǎo)入組件的方式,使代碼看上去更加的優(yōu)雅,所以SpringBoot如今受到大小公司和大多數(shù)程序員的青睞,不是沒有原因的。

SpringBoot之所以可以做到簡化配置文件直接啟動(dòng),無外乎是其內(nèi)部的兩種設(shè)計(jì)策略: 開箱即用和約定大于配置 。

開箱即用:在開發(fā)過程中,通過maven項(xiàng)目的pom文件中添加相關(guān)依賴包,然后通過相應(yīng)的注解來代替繁瑣的XML配置以管理對(duì)象的生命周期。

約定大于配置:由SpringBoot本身來配置目標(biāo)結(jié)構(gòu),由開發(fā)者在結(jié)構(gòu)中添加信息的軟件設(shè)計(jì)范式。這一特點(diǎn)雖降低了部分靈活性,增加了BUG定位的復(fù)雜性,但減少了開發(fā)人員需要做出決定的數(shù)量,同時(shí)減少了大量的XML配置,并且可以將代碼編譯、測試和打包等工作自動(dòng)化。

那么在這篇博客中,我們需要了解的所有東西,就應(yīng)該從這兩個(gè)特點(diǎn)出發(fā),一步一步深入SpringBoot自動(dòng)裝配的原理。


開箱即用原理

要理解這一特點(diǎn),首先要先自己體會(huì)開箱即用的整個(gè)過程帶來的便利。

體驗(yàn)開箱即用

SpringBoot提供了我們快速創(chuàng)建SpringBoot項(xiàng)目的地方:https://start.spring.io/

我們只需要在這個(gè)網(wǎng)頁中把整個(gè)項(xiàng)目起好名字,然后選好我們需要的組件,就可以直接獲得一個(gè)可以跑起來的SpringBoot項(xiàng)目。

圖片

我們只需要填完上述信息,點(diǎn)擊Generate,就可以直接將一個(gè)SpringBoot項(xiàng)目下載下來,然后導(dǎo)入我們的IDE,Eclipse或者IDEA都可,之后就可以直接將它運(yùn)行起來。

全項(xiàng)目結(jié)構(gòu):

圖片

啟動(dòng):

圖片

訪問:http://localhost:8080/

圖片

代表整個(gè)SpringBoot項(xiàng)目啟動(dòng)成功。

開箱即用原理剖析

對(duì)比SSM配置

其實(shí)在上文的開箱即用中,我們相當(dāng)于引入了一個(gè)SpringMVC的組件,但是大家可以看到,我們沒有經(jīng)過任何的配置就將項(xiàng)目啟動(dòng)了。反觀過去SSM框架的SpringMVC配置,我這里有一份留存的大家可以對(duì)比一下。

spring-web.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
    
    
    
    <mvc:annotation-driven />

    
    <mvc:resources mapping="/resources/**" location="/resources/" />
    <mvc:default-servlet-handler />

    
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/html/"><span class="hljs-name"property>
        <property name="suffix" value=".html"><span class="hljs-name"property>
    <span class="hljs-name"bean>
    
    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="utf-8"><span class="hljs-name"property>
        <property name="maxUploadSize" value="10485760000"><span class="hljs-name"property>
        <property name="maxInMemorySize" value="20971520"><span class="hljs-name"property>
    <span class="hljs-name"bean>
    
    <bean
        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
                <bean
                    class="org.springframework.http.converter.StringHttpMessageConverter">
                    <property name="supportedMediaTypes">
                        <list>
                            <value>text/html;charset=UTF-8<span class="hljs-name"value>
                        <span class="hljs-name"list>
                    <span class="hljs-name"property>
                <span class="hljs-name"bean>
            <span class="hljs-name"list>
        <span class="hljs-name"property>
    <span class="hljs-name"bean>
    
    <context:component-scan base-package="com.SchoolShop.o2o.web" />
    
<span class="hljs-name"beans>

web.xml:


      name>spring-dispatcherclass="hljs-name"servlet-name>
      class>org.springframework.web.servlet.DispatcherServletclass="hljs-name"servlet-class>
      
          name>contextConfigLocationclass="hljs-name"param-name>
          value>classpath:spring/spring-*.xmlclass="hljs-name"param-value>
      class="hljs-name"init-param>
  class="hljs-name"servlet>
  mapping>
      name>spring-dispatcherclass="hljs-name"servlet-name>
      
      /class="hljs-name"url-pattern>
  class="hljs-name"servlet-mapping>

可以看到,這里需要配置兩個(gè)文件,web.xml和spring-web.xml,配置可以說是相當(dāng)繁重。

那么相對(duì)于這個(gè),SpringBoot的開箱即用就顯得特別方便,那么我們著重聊聊SpringBoot開箱即用的原理。

從pom.xml開始

SpringBoot的項(xiàng)目都會(huì)存在一個(gè)父依賴,按住Ctrl+鼠標(biāo)左鍵,可以點(diǎn)進(jìn)去。

<parent>
    <groupId>org.springframework.boot<span class="hljs-name"groupId>
    <artifactId>spring-boot-starter-parent<span class="hljs-name"artifactId>
    <version>2.2.1.RELEASE<span class="hljs-name"version>
    <relativePath/> 
<span class="hljs-name"parent>

點(diǎn)進(jìn)去之后發(fā)現(xiàn)里面除了一些插件和配置文件的格式之外,還存在一個(gè)依賴。

<parent>
    <groupId>org.springframework.boot<span class="hljs-name"groupId>
    <artifactId>spring-boot-dependencies<span class="hljs-name"artifactId>
    <version>2.2.1.RELEASE<span class="hljs-name"version>
    <relativePath>../../spring-boot-dependencies<span class="hljs-name"relativePath>
<span class="hljs-name"parent>

于是再點(diǎn)進(jìn)去,可以發(fā)現(xiàn)里面放了很多的依賴和依賴的版本號(hào)。由于這個(gè)文件實(shí)在太長了,所以這里只展示一部分。

圖片

圖片

所以我們可以得出第一個(gè)結(jié)論:

spring-boot-dependencies:作為父工程,存放了SpringBoot的核心依賴。我們在寫或者引入一些SpringBoot依賴的時(shí)候,不需要指定版本,正是因?yàn)镾pringBoot的父依賴已經(jīng)幫我們維護(hù)了一套版本。

另外我們還可以看到,在父依賴中也幫我們寫好了資源庫,不用我們自己再去配置了。


      
        trueclass="hljs-name"filtering>
        ${basedir}/src/main/resourcesclass="hljs-name"directory>
        <includes>
            
          <include>**/application*.ymlclass="hljs-name"include>
          <include>**/application*.yamlclass="hljs-name"include>
          <include>**/application*.propertiesclass="hljs-name"include>
        class="hljs-name"includes>
      class="hljs-name"resource>
      
        ${basedir}/src/main/resourcesclass="hljs-name"directory>
        
          <exclude>**/application*.ymlclass="hljs-name"exclude>
          <exclude>**/application*.yamlclass="hljs-name"exclude>
          <exclude>**/application*.propertiesclass="hljs-name"exclude>
        class="hljs-name"excludes>
      class="hljs-name"resource>
class="hljs-name"resources>

啟動(dòng)器

<dependency>
    <groupId>org.springframework.boot<span class="hljs-name"groupId>
    <artifactId>spring-boot-starter<span class="hljs-name"artifactId>
    <version>2.2.1.RELEASE<span class="hljs-name"version>
<span class="hljs-name"dependency>

啟動(dòng)器就是SpringBoot的啟動(dòng)場景,比如我們要使用web相關(guān)的,那么就直接引入spring-boor-starter-web,那么他就會(huì)幫我們自動(dòng)導(dǎo)入web環(huán)境下所有必需的依賴。

我們來看看啟動(dòng)器中存放了一些什么內(nèi)容:

以spring-boot-starter為例:

<dependency>
      <groupId>org.springframework.boot<span class="hljs-name"groupId>
      <artifactId>spring-boot<span class="hljs-name"artifactId>
      <version>2.2.1.RELEASE<span class="hljs-name"version>
      <scope>compile<span class="hljs-name"scope>
    <span class="hljs-name"dependency>
    <dependency>
      <groupId>org.springframework.boot<span class="hljs-name"groupId>
      <artifactId>spring-boot-autoconfigure<span class="hljs-name"artifactId>
      <version>2.2.1.RELEASE<span class="hljs-name"version>
      <scope>compile<span class="hljs-name"scope>
    <span class="hljs-name"dependency>
    <dependency>
      <groupId>org.springframework.boot<span class="hljs-name"groupId>
      <artifactId>spring-boot-starter-logging<span class="hljs-name"artifactId>
      <version>2.2.1.RELEASE<span class="hljs-name"version>
      <scope>compile<span class="hljs-name"scope>
    <span class="hljs-name"dependency>
    <dependency>
      <groupId>jakarta.annotation<span class="hljs-name"groupId>
      <artifactId>jakarta.annotation-api<span class="hljs-name"artifactId>
      <version>1.3.5<span class="hljs-name"version>
      <scope>compile<span class="hljs-name"scope>
    <span class="hljs-name"dependency>
    <dependency>
      <groupId>org.springframework<span class="hljs-name"groupId>
      <artifactId>spring-core<span class="hljs-name"artifactId>
      <version>5.2.1.RELEASE<span class="hljs-name"version>
      <scope>compile<span class="hljs-name"scope>
    <span class="hljs-name"dependency>
    <dependency>
      <groupId>org.yaml<span class="hljs-name"groupId>
      <artifactId>snakeyaml<span class="hljs-name"artifactId>
      <version>1.25<span class="hljs-name"version>
      <scope>runtime<span class="hljs-name"scope>
    <span class="hljs-name"dependency>

其中存放了自動(dòng)配置相關(guān)的依賴、日志相關(guān)依賴、還有Spring-core等依賴,這些依賴我們只需要導(dǎo)入一個(gè)spring-boor-starter就可以直接將其全部引入,而不需要再像以前那樣逐個(gè)導(dǎo)入了。

SpringBoot會(huì)將所有的功能場景都封裝成一個(gè)一個(gè)的啟動(dòng)器,供開發(fā)人員使用。

我們在使用的時(shí)候也可以直接去官網(wǎng)上找我們所需的啟動(dòng)器,直接將其引入。

獲取啟動(dòng)器文檔:

https://docs.spring.io/spring-boot/docs/2.2.1.RELEASE/reference/html/using-spring-boot.html#using-boot-starter

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2970

    瀏覽量

    104808
  • 開發(fā)
    +關(guān)注

    關(guān)注

    0

    文章

    370

    瀏覽量

    40855
  • 框架
    +關(guān)注

    關(guān)注

    0

    文章

    403

    瀏覽量

    17504
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    340

    瀏覽量

    14353
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ESP32用的開發(fā)版嘗試smartconfig,功能使用正常,但是只要重啟后又要設(shè)置一遍,怎么才能記住配置?

    用的開發(fā)版嘗試smartconfig,功能使用正常,但是只要重啟后又要設(shè)置一遍 怎么才能記住配置?
    發(fā)表于 06-26 07:13

    [轉(zhuǎn)帖]當(dāng)你扛不住的時(shí)候就讀一遍

      當(dāng)你扛不住的時(shí)候就讀一遍1.不求與人相比,但求超越自己,要哭就哭出激動(dòng)的淚水,要笑就笑出成長的性格?! ?.與其用淚水悔恨今天,不如用汗水拼. 搏今天?! ?.當(dāng)眼淚流盡的時(shí)候
    發(fā)表于 05-24 11:58

    個(gè)人認(rèn)為51匯編至少過一遍

    個(gè)人認(rèn)為51匯編至少過一遍?,F(xiàn)在網(wǎng)上百分之九十的單片機(jī)資料都是C 語言的,都適合初學(xué)者入門,我覺得這個(gè)不錯(cuò)的?,F(xiàn)在也越來越多的發(fā)燒友認(rèn)為沒必要再學(xué)匯編,直接學(xué)C語言,這當(dāng)然沒錯(cuò),可惜,如果你連單片機(jī)
    發(fā)表于 08-21 08:22

    主程序執(zhí)行一遍后單片機(jī)鎖存器怎么變化?

    例如點(diǎn)亮數(shù)碼管的程序最后行死循環(huán)去掉的話鎖存器是保持狀態(tài)使數(shù)碼管亮著還是執(zhí)行一遍主函數(shù)就滅了?#include***it dula=P2^6;***it wela=P2^7;void main
    發(fā)表于 10-19 18:25

    剛學(xué)STM32,按照個(gè)網(wǎng)上找的LED程序,自己寫了一遍,可是...

    剛學(xué)STM32,按照個(gè)網(wǎng)上找的LED程序,自己寫了一遍,可是無法編譯!!求大神幫忙解決下,感激不盡。下面是我寫的程序。
    發(fā)表于 11-04 02:33

    只是為了積分,刷一遍主題

    只是為了積分,刷一遍主題
    發(fā)表于 10-11 11:14

    已經(jīng)跟著入門書籍學(xué)了一遍LabVIEW基礎(chǔ)知識(shí),現(xiàn)在該怎么練手呢

    小白剛起步,過了一遍基本知識(shí)后不知如何開展下步,大神們給指導(dǎo)個(gè)方向,或者下步需要用的學(xué)習(xí)資料也可以
    發(fā)表于 05-04 16:30

    IAP15W413AS灌程序要先用串口燒錄一遍

    IAP15W413AS灌程序要先用串口燒錄一遍然后在燒錄軟件中選擇下次用485燒錄,為何不能直接用485工具燒錄?是啥原因啊?。?!
    發(fā)表于 06-26 18:35

    6678點(diǎn)擊ccml文件debug時(shí)當(dāng)前的out文件會(huì)給所有的core都下載一遍

    我的板子是EVM6678L的開發(fā)板,ccs5.3版本,現(xiàn)在有個(gè)問題,我開始還好好的,突然在次右鍵點(diǎn)擊ccml文件debug時(shí),當(dāng)前的out文件會(huì)給所有的core都下載一遍,在debug之前,我已經(jīng)選擇了只是用core0了,不知道為什么?望達(dá)人解答
    發(fā)表于 12-28 11:01

    怎么讓液晶把每種顏色都顯示一遍

    原子哥哥,我想讓液晶吧每種顏色都顯示一遍,可是有很多種顏色為顯示出來?#頭文件int main( void ){u16i ; 初始化; do {LCD_Clear( i );i++;delay_ms
    發(fā)表于 03-04 06:35

    請(qǐng)問在bootloader里面已經(jīng)包含的配置在app里面還需要在配置一遍嗎?

    請(qǐng)問大家在bootloader里面已經(jīng)包含的配置在app里面還需要在配置一遍么。。如果在app里面的配置和bootloader里面不樣呢。。望高手給予幫助。。
    發(fā)表于 04-22 03:26

    為什么任哲VC的移植我只能運(yùn)行一遍?

    只顯示一遍MY,不是循環(huán)顯示。例12-2
    發(fā)表于 11-04 03:47

    英偉達(dá)AI機(jī)器人開發(fā)新技能 看一遍就能自學(xué)成才

    AI和機(jī)器學(xué)習(xí)已經(jīng)流行了很久,但我們通常需要輸入海量的學(xué)習(xí)樣本和已知結(jié)果來讓機(jī)器學(xué)習(xí)項(xiàng)新技能。英偉達(dá)的研究者為工業(yè)機(jī)器人開發(fā)了種新的學(xué)習(xí)方法,和我們?nèi)祟?b class='flag-5'>一樣,機(jī)器人能通過觀看其他人的操作直接進(jìn)行模仿,教
    發(fā)表于 05-23 02:25 ?1917次閱讀

    個(gè)深度學(xué)習(xí)模型能完成幾項(xiàng)NLP任務(wù)?

    對(duì)于機(jī)器翻譯、文本摘要、Q&A、文本分類等自然語言處理任務(wù)來說,深度學(xué)習(xí)的出現(xiàn)一遍刷新了state-of-the-art的模型性能記錄,給研究帶來諸多驚喜。但這些任務(wù)般都有各自的度
    的頭像 發(fā)表于 06-26 15:19 ?4616次閱讀

    深度盤點(diǎn)一遍自動(dòng)裝配原理(下)

    Spring Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來簡化新Spring應(yīng)用的初始搭建以及開發(fā)過程。該框架使用了特定的方式來進(jìn)行配置,從而使開發(fā)人員不再需要定義樣板化的配置。通過這種方式,Spring Boot致力于在蓬勃發(fā)展的快速應(yīng)用開發(fā)領(lǐng)域(rapid application development)成為領(lǐng)導(dǎo)者。
    的頭像 發(fā)表于 04-07 11:18 ?431次閱讀
    <b class='flag-5'>深度</b><b class='flag-5'>盤點(diǎn)</b><b class='flag-5'>一遍</b><b class='flag-5'>自動(dòng)</b><b class='flag-5'>裝配</b>原理(下)
    主站蜘蛛池模板: 男人插曲视频大全免费网站| 日本十八禁无遮拦啪啪漫画| 好爽别插了无码视频| 国产午夜精品久久理论片 | 区产品乱码芒果精品P站在线| 人体内射精一区二区三区| 色偷偷男人的天堂a v| 亚洲 欧美 国产 综合久久| 亚洲国产精品久久又爽黄A片| 幺妹视频福利视频| 97一期涩涩97片久久久久久久| aaa在线观看视频高清视频| 大香伊人久久精品一区二区| 国产剧情在线精品视频不卡| 火影小南被爆羞羞网站| 美女张开让男生桶| 日韩在线看片中文字幕不卡| 亚洲国产第一区二区三区| 中国欧美日韩一区二区三区| YELLOW在线观看高清视频免费 | 亚洲视频国产| 99国产小视频| 国产免费69成人精品视频| 久久AV国产麻豆HD真实| 女人18毛片| 婷婷综合亚洲爱久久| 一个色综合久久| jk制服喷水| 国精产品一区一区三区有限在线| 久久久久国产精品美女毛片| 欧美日韩中文字幕综合图区| 小776 论坛| 97免费在线视频| 国产精品久久久久久久A片冻果| 久久香蕉国产线看观看精品| 日韩娇小性hd| 在线观看免费视频a| 俄罗斯18xv在线观看| 久久久中日AB精品综合| 少妇伦子伦情品无吗| 中文字幕在线观看亚洲|