springboot,一見鐘情

什么是springboot?

   筆者喜歡以“貌”取人,從字面意思上得到spring可能要booter化了*)

聯(lián)想到j(luò)ava的bootstrap classloader,這里你不得不產(chǎn)生對(duì)它的向往了。當(dāng)然springboot是這樣作自我介紹的:“使用我,可以快速的搭建一個(gè)完整的spring應(yīng)用”,以前在學(xué)習(xí)spring時(shí),spring自己說它是一個(gè)輕量級(jí)的框架,可是在開發(fā)時(shí) 每次都要配置這么多的xml 并沒有人讓覺覺輕量級(jí)。當(dāng)然這么理解是有問題的,spring兩個(gè)核心IOC和Aop支撐起來這個(gè)框架。以及后來陸陸續(xù)續(xù)家族越來越強(qiáng)大,當(dāng)然今天這個(gè)家族成員springboot 是非常讓人激動(dòng)的產(chǎn)品,springboot = spring*。在如今應(yīng)用服務(wù)化的時(shí)代下,springcloud也足夠讓人驚艷,筆者之前很崇拜dubbo,很強(qiáng)大的RPC框架,對(duì)比這后springcloud有更強(qiáng)大的存在。今天主角是springboot。當(dāng)然,springboot與springcloud亦是天作之合。

springboot vs sping*

springboot 秉承著約定大于配置的思想成功的吸引了眾多的開發(fā)者。

ssm結(jié)構(gòu)是如今用的挺多的結(jié)構(gòu)。非常的方便,配置spring的上下文(context)有點(diǎn)太機(jī)械化了,而且對(duì)于web項(xiàng)目來講tomcat的部署也是必須的(這不是廢話嗎?)還有 每次maven或gradle中依賴密密麻麻的jar包,在springboot中一切都是可以優(yōu)化的。springboot 秉承著約定大于配置的思想成功的吸引了眾多的開發(fā)者。今天筆者就簡(jiǎn)單的做一個(gè)springboot項(xiàng)目的例子

IDEA+maven 構(gòu)建

①新建一個(gè)maven web項(xiàng)目
maven工程.png
②編輯pom添加依賴
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>is.jack.boots</groupId>
    <artifactId>boot</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--添加springboot的家族長(zhǎng)老 ^_^ 方便管理依賴版本 以及后續(xù)支持?jǐn)?shù)據(jù)持久化 緩存 模板引擎 中間件等等-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.8.RELEASE</version>
    </parent>

    <!-- springboot 依賴核心 一個(gè)jar包 包羅眾多spring 組件 以及 tomcat -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <!-- maven spring 插件 用于maven打包管理 以及maven命令化springboot -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
③啟動(dòng)項(xiàng)目
對(duì)呀!以上兩部就完成項(xiàng)目的配置了.now,你只需要啟動(dòng)項(xiàng)目就行

以往的spring項(xiàng)目都得deployed成war包 然后發(fā)布到tomcat中去。而springboot-starter-web jar包中有以下結(jié)構(gòu)

image.png

傳統(tǒng)的spring的  bean,context,aop,web,mvc,core,slf4j加上tomcat,jackson等統(tǒng)統(tǒng)一網(wǎng)打進(jìn)。
這是springboot 第一處強(qiáng)大的地方
接著 回到正題啟動(dòng)它 
新建一個(gè)啟動(dòng)入口(新建一個(gè)main入口)

package io.entry;

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;

import java.util.Arrays;

@SpringBootApplication
public class Excute {

    public static void main(String[] args){
        
        //這里執(zhí)行結(jié)束,項(xiàng)目就啟動(dòng)了 下面的被@Bean的方法可以根據(jù)自己需求添加
        SpringApplication.run(Excute.class,args);
        
    }

    @Bean
    public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
        //傳統(tǒng)spring項(xiàng)目中監(jiān)聽組件使用的是ApplicationListener
        //在springboot中使用的是CommandLineRunner 并且這個(gè)會(huì)自動(dòng)幫你添加springboot中的組件
        // -> java8 中新增的表達(dá)式 lamuda ps: java是不會(huì)眼睜睜的看著讓其他簡(jiǎn)潔的語言隨便超越,
        //所以java出的一些新特性也是值得關(guān)注的,順便消化一下
        return args -> {

            System.out.println("我可以打印出springboot 所用的組件或模塊了");

            String[] beanNames = ctx.getBeanDefinitionNames();
            Arrays.sort(beanNames);
            for (String beanName : beanNames) {
                System.out.println(beanName);
            }

        };
    }

}


建立一個(gè)REST風(fēng)格的controller

什么是REST ?你經(jīng)常會(huì)用到ajax吧,使用一個(gè)uri請(qǐng)求的到了一個(gè)son或xml等等的數(shù)據(jù)。ok,這就是REST風(fēng)格,而不是你經(jīng)常使用的MVC中向你返回一個(gè)view。回到這里 REpresentation State Transfer 資源表屬性轉(zhuǎn)移 就是REST,他是一種架構(gòu)約束。

package io.entry;


import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

//@RestController相當(dāng)于  @RequestMapping + @Responsebody
@RestController
public class Controller {

    @RequestMapping("/")
    public String tr(){

        return "hello springboot!";
    }



}

執(zhí)行main方法 啟動(dòng)了該項(xiàng)目

image.png
③使用springboot maven插件執(zhí)行項(xiàng)目

在終端輸入 mvn package target/boot-1.0-SNAPSHOT.jar
 將項(xiàng)目打成jar包
再輸入  java -jar target/boot-1.0-SNAPSHOT.jar 
這里springboot maven 插件會(huì)自動(dòng)找到main函數(shù)執(zhí)行 springboot 
當(dāng)然上述操作完成后 開啟工程還有個(gè)方法

使用操作系統(tǒng)終端(windows 是cmd)

打開終端進(jìn)入你的工程路徑里 輸入 mvn spring-boot:run

image.png

瀏覽器測(cè)試

簡(jiǎn)單的REST測(cè)試.png

今天完成了springboot的初次體驗(yàn),相信很多的開發(fā)者會(huì)對(duì)它產(chǎn)生了很不錯(cuò)的印象,往后的幾次將持續(xù)更新springboot 系列。
https://github.com/jack210481/boot.git

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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