從.Net到Java學習第二篇——IDEA and start spring boot
所謂工欲善其事,必先利其器,做java開發也一樣,在比較了目前最流行的幾個java IDE(eclipse,myeclipse、IDEA)之後,我果斷選擇IDEA。要知道,寫程式碼的水平可以是一坨屎,但是開發工具一定要用最好的,就像一個人武功很差,又不拿一把像樣的兵器在手的話,根本就沒法闖蕩江湖,分分鐘被人砍死了。之前用eclipse,myeclipse的時候,由於和過去用VS的落差太大,弄得我一度想放棄寫java程式碼,直到IDEA的出現,猶如黑暗中的一盞明燈。我是一個效率至上的人,原本可以2s鍾擼完的程式碼,你偏偏要花10s,我就受不了,這不是浪費生命嗎?打個比方,同樣水平的人搏鬥,一個赤手空拳,一個拿把砍刀,誰的勝算大?除非你內功足夠強大,強大到不滯於物,草木竹石皆可傷人。所以那種拿記事本擼程式碼的人,要麼就是足夠牛,要麼就是無形裝逼被致命。善假於物也,老鳥和菜鳥很大一個區別就是,老鳥會善用各種好用的輔助開發工具。用這些工具是幹嘛的?提升開發效率!產出=時間*效率。時間大家都是8h,你再怎麼加班最多24h,而效率往往是可以超越4倍的,也就是說可能你24h也幹不過別人8h,因為效率不一樣。
srping boot的出現或許可以將java開發人員從996中的魔咒中解脫出來,從而少加班。採用Spring Boot開發實質上也是一個常規的Spring專案開發,只是利用了Spring Boot啟動程式和自動配置簡化開發過程,提高開發效率。Spring Boot專案開發程式碼的實現依然是使用Spring mvc+spring+mybatis等,當然能整合幾乎所有的開源專案。
java環境配置
下載java JDK,建議1.8以上版本。
我這裡下載的是:jdk_8.0.1310.11_64.exe
然後進行安裝,我這裡的安裝目錄是C:\Program Files\Java\jdk1.8.0_131,後面會用的。
配置環境變數
新建系統變數JAVA_HOME,值:C:\Program Files\Java\jdk1.8.0_131
編輯環境變數Path,在變數值的最前面新增%JAVA_HOME%\bin;,注意最後要有一個;分隔。
IDEA安裝及破解
去官網下載最新版本的IDEA,需要注意的是,官網提供了兩個版本一個是社群免費版,一個是旗艦版,我們要下載旗艦版的,因為免費版少了許多功能。
現在最新版是IntelliJ IDEA 2018.2了,我之前下載的是IntelliJ IDEA 2018.1.4 x64,因為我的是win10 64bit系統。
下載完成之後,點選下一步下一步就可以了,但是在最後那一步一定要注意,否則可能破解失敗,那就是在最後出現完成介面的時候,一定要把那個是否馬上執行前面的勾去掉。
(1)編輯電腦上C:\Windows\System32\drivers\etc下的hosts檔案
加入下面一行程式碼:
0.0.0.0 account.jetbrains.com
儲存並關閉。
開啟IDEA,
IDEA配置
IDEA安裝後之後,我們要來對其進行個性化配置,我覺得最重要的有兩點,一個是快捷鍵的配置,一個是程式碼顯示風格的配置,像我習慣了VS的程式碼顯示風格,那麼我們可以對其進行自定義修改。
下載完成之後,解壓之後是一個settings.jar檔案,然後在IDEA中把配置匯入進來即可。
最後的顯示效果如下:
關於IDEA的程式碼格式化快捷鍵,預設是:Ctrl+Alt+L,這和許多軟體的鎖屏快捷鍵衝突,所以我建議將其進行修改,我這裡已經修改為和VS程式碼格式化快捷鍵一樣:Ctrl+K,Ctrl+F。這樣兩個組合快捷鍵。
File——Settings
在VS中程式碼提示大小寫是不敏感的,而IDEA預設情況下是敏感的,由於個人習慣,那麼我需要將IDEA的程式碼智慧提示也修改為大小寫不敏感。
在IDEA中寫的程式碼或者複製進去的程式碼,其名稱空間也就是包會自動引入的,如果出現多個包,那麼就需要自己手動引入,引入方式也很簡單,用滑鼠點到程式碼位置處,然後Atl+Enter,選擇指定的包就可以了。雖然java中沒有屬性這個傳說,C#中屬性其實就是像java中一樣是通過一個get方法和一個set方法實現的,只是C#進行了封裝,而java需要自己寫,不過IDEA中有快捷鍵可以自動生成欄位的屬性:Alt+Insert。
不管使用什麼樣的IDE,熟記各種快捷鍵都是必須的,為啥?效率!效率!還是效率!
第一個spring boot web 程式
what's spring boot?
我的理解是:spring boot=spring+spring mvc+一堆java技術棧的相關框架+約定大於配置的思想。
spring boot 並不是一項新的技術,就像ajax一樣,而是各種已有技術的一個組合。它的出現,將極大地提高java應用的開發效率。同時,它的出現,徹底顛覆了以往我對java的認識(除了配置,TMD還是配置)。輕量級、可插拔、微服務。
File——New——Project
關於https://start.spring.io/,我們開啟看下這是個啥
這不正是生成專案jar包的介面嗎,直接在這個介面生成jar包,然後用eclipse開啟也是一樣的呀。
注意:通過這種方式來建立spring boot專案,會聯網,從網站下載一些jar包。如果你想要通過離線的方式建立專案,可以選擇Maven。
由於是web專案,那麼我們這裡選擇web,關於spring boot版本,最新版本是2.1.0,我這裡用它的上一個穩定版1.5.14。我們看到有些版本後面有SNAPSHOT字樣,表明那是搶鮮版。
一直點選下一步,最終專案結果目錄如下:
我們先來看下pom.xml,它是maven來管理各種jar包依賴的一個配置檔案,maven相當於.net中的nuget,是一個包管理工具。
<?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>com.yujie</groupId> <artifactId>firstdemo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>firstdemo</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.14.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
我們看到<parent>節點中申明瞭版本號,而且它是作為一個父節點,那麼也就意味著它的子節點可以繼承這個父節點的版本依賴。哪些是它的子節點,就是<dependencies>下面groupId和<parent>中groupId一致的依賴。這個pom.xml中的檔案,正是我們之前視覺化配置之後的產物,裡面的一些資訊就是我們之前填寫的。那麼後續,我們需要擴充套件的時候,只要直接修改這個配置檔案就可以了。
關於pom.xml詳解,請參考:pom.xml詳解
如果你在pom.xml中新增程式碼的時候,沒有智慧提示,那麼你需要更新一下。
接下來,我們看下FirstdemoApplication這個類
package com.yujie; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class FirstdemoApplication { public static void main(String[] args) { SpringApplication.run(FirstdemoApplication.class, args); } }
我們看到有一個@SpringBootApplication註解,我們檢視一下它的原始碼如下:
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package org.springframework.boot.autoconfigure; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.springframework.boot.SpringBootConfiguration; import org.springframework.boot.context.TypeExcludeFilter; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.FilterType; import org.springframework.context.annotation.ComponentScan.Filter; import org.springframework.core.annotation.AliasFor; @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 { @AliasFor( annotation = EnableAutoConfiguration.class, attribute = "exclude" ) Class<?>[] exclude() default {}; @AliasFor( annotation = EnableAutoConfiguration.class, attribute = "excludeName" ) String[] excludeName() default {}; @AliasFor( annotation = ComponentScan.class, attribute = "basePackages" ) String[] scanBasePackages() default {}; @AliasFor( annotation = ComponentScan.class, attribute = "basePackageClasses" ) Class<?>[] scanBasePackageClasses() default {}; }View Code
從原始碼中可以看出,其實@SpringBootApplication = (預設屬性)@Configuration + @EnableAutoConfiguration + @ComponentScan。
我們依次再分別來看下這三個註解是什麼意思。
@Configuration 是一個類級註釋,指示物件是一個bean定義的源。@Configuration 類通過 @bean 註解的公共方法宣告bean。 @Configuration的註解類標識這個類可以使用Spring。
@Bean 註釋是用來表示一個方法例項化,配置和初始化是由 Spring IoC 容器管理的一個新的物件。
@Configuration 一般與 @Bean 註解配合使用,用 @Configuration 註解類等價與 XML 中配置 beans,用 @Bean 註解方法等價於 XML 中配置 bean。
@EnableAutoConfiguration 註解的類所在的包有特定的意義,並且作為預設配置使用。
@ComponentScan 註解會自動掃描指定包下的全部標有 @Component註解 的類,並註冊成bean,當然包括@Component下的子註解@Service,@Repository,@Controller。
application.properties
這是應用的配置檔案,跟.net專案中的web.config差不多。但是我個人更習慣於使用application.yml這個檔案來替代application.properties
修改application.properties,命名為application.properties-bak,其實就是讓這個配置檔案失效,但是我又不想直接刪除它。
然後在新增一個檔案application.yml,注意要和application.properties在同一級目錄下面。
新增配置項:
server:
port: 8082
我這裡修改tomcat伺服器的啟動埠為8082,由於IDEA srping boot專案中自帶了tomcat,所以我們不需要配置外部的tomcat。
新建一個控制器TestController,它這個控制器的命名規範和.net mvc中規範一致,都是Controller結尾。程式碼如下:
package com.yujie; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { // @RequestMapping("/hello") // @RequestMapping(value = "/hello") @RequestMapping(value = "/hello",method =RequestMethod.GET) // @GetMapping("/hello") public String hello(){ return "hello spring boot!"; } }
@RequestMapping("/hello")和@RequestMapping(value = "/hello"是等價的。
@RequestMapping(value = "/hello",method =RequestMethod.GET)和 @GetMapping("/hello")是等價的。
@RestController註解相當於@ResponseBody + @Controller。
如果需要返回到指定頁面,則需要用 @Controller配合檢視解析器InternalResourceViewResolver才行。
如果需要返回JSON,XML或自定義mediaType內容到頁面,則需要在對應的方法上加上@ResponseBody註解。
注意:@RestController註解,相當於@[email protected]兩個註解的結合,返回json資料不需要在方法前面加@ResponseBody註解了,但使用@RestController這個註解,就不能返回jsp,html頁面,檢視解析器無法解析jsp,html頁面
執行程式:
熱部署
在這之前,如果我們每次修改了程式碼,都必須重啟一下伺服器,並重新執行程式碼,那麼有了熱部署之後,修改了程式碼,我們只需要在IDEA中點選一下Build,就可以直接看到效果了,不需要重啟伺服器。
pom.xml檔案中新增如下依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
新增依賴之後,在IDEA的右下角會彈出如下提示框
點選“Import Changes"將會自動下載j所依賴的jar包。
修改pom.xml,
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> </configuration> </plugin> </plugins> </build>
如果不想每次修改後都要手動去Build,可以在IDEA中配置自動Build
然後按組合鍵:Shift+ALT+Ctrl+/ ,選擇“Registry”,回車,找到“complier.automake.allow.when.app.running”,點選勾選即可。
優點:簡單,支援Spring-boot專案,支援成員級別的修改熱部署。
缺點:只支援spring-boot專案。
讀取配置檔案
修改配置檔案application.yml,新增如下程式碼:
server:
port: 8082
website:
name: 網站名稱
domain: www.yujie.com
msg: 我這是一個部落格網站
新建配置檔案類WebSiteConfig,欄位名稱和配置項中的名稱保持一致。
package com.yujie.config; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; @Configuration @ConfigurationProperties(prefix = "website") public class WebSiteConfig { private String name; private String domain; private String msg; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDomain() { return domain; } public void setDomain(String domain) { this.domain = domain; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } @Override public String toString() { return "WebSiteConfig{" + "name='" + name + '\'' + ", domain='" + domain + '\'' + ", msg='" + msg + '\'' + '}'; } }
在控制器類TestController中修改程式碼:
@RestController public class TestController { @Autowired private WebSiteConfig webSiteConfig; // @RequestMapping("/hello") // @RequestMapping(value = "/hello") @RequestMapping(value = "/hello",method =RequestMethod.GET) // @GetMapping("/hello") public String hello(){ return "hello spring boot!1"; } @GetMapping("/config") public String getConfig(){ return webSiteConfig.toString(); } }
是不是感覺像使用vs開發asp.net mvc專案一樣那麼簡單?甚至比.net 操作配置檔案還方便吧
參考:
相關推薦
從.Net到Java學習第二篇——IDEA and start spring boot
所謂工欲善其事,必先利其器,做java開發也一樣,在比較了目前最流行的幾個java IDE(eclipse,myeclipse、IDEA)之後,我果斷選擇IDEA。要知道,寫程式碼的水平可以是一坨屎,但是開發工具一定要用最好的,就像一個人武功很差,又不拿一把像樣的兵器在手的話,根本就沒法闖蕩江湖,分分
python學習第二篇
合並 數據添加 一個 body 標題樣式 img isa image nco 一:三元運算 1 result = 1 if a>0 else 2 三元運算先判斷 if後的語句是否成立,像上面代碼如果a>0則 result = 1 ,不是則result = 2
python學習[第二篇] 基礎二
if 語句 div 控制 lua iter only repeat lock ase 控制結構 if 語句 # only if block if condition: if_true_block # if_else block if condition:
暑假JAVA學習 第二篇
重新 資料 這也 交流 eclips 私有字段 ava java環境 ips 這一周開始深入學習方法的概念和運用,一上來的那個使用Math.random()生成隨機數,感覺很有用也很好玩。。。。然後就是和c++差不多的生成類來使用更加方便。 然後就是開始重視搜集整理
MyBatis學習——第二篇(引數傳遞)
1:引數傳遞 在使用mybatis的過程中,除了上篇的簡單案例,我們面對的實際業務情況要複雜很多,在mapper檔案中會有各種各樣的業務場景 對於傳遞的傳遞的引數,和返回值都有這各種各樣的需求,本篇就傳遞引數做一個詳細講解 2:案例程式碼 通過實際案例,對不同的傳遞引數做詳細的案例分
Linux學習第二篇 — 初次嘗試系統命令
在上一篇當中,小編簡單的說說了計算機的組成結構,下面進入Linux作業系統的具體操作。 操作環境:Ubuntu 16.04 喜好Linux的玩家可以自行在官網下載,小編轉載了幾篇寫的不錯的安裝教程和美化開發介面的文章,大家可以品鑑一番。(當中涉及到了磁碟分割槽這一重要問題,由於小編暫
【轉】Hadoop學習--第二篇:史上最詳細的Hadoop環境搭建
GitChat 作者:鳴宇淳 原文: 史上最詳細的Hadoop環境搭建 前言 Hadoop在大資料技術體系中的地位至關重要,Hadoop是大資料技術的基礎,對Hadoop基礎知識的掌握的紮實程度,會決定在大資料技術道路上走多遠。 這是一篇入門文章,Hadoop的學
SpringBoot學習第二篇:Spring Boot配置檔案詳解
原文首發於:https://www.fangzhipeng.com/springboot/2017/07/11/springboot2-config-file/ 本文出自方誌朋的部落格 springboot採納了建立生產就緒Spring應用程式的觀點。 Spring Boot優先於配置的慣例,旨
java8學習第二篇:try-with-resources
Java8裡的一個新語法特性:try-with-resources。 這個語法特性其實從java7裡就有了,不過java8的sample裡依然有這個。 try-with-resources的特性就是,在try( ...)裡宣告的資源,會在try-catch程式碼塊結束後自
Python 語言學習 第二篇:數據類型(字符串)
拼接 查找字符 保留 upper gis 原始的 一次 \n 處的 字符串是一個有序的字符的不可變序列,用於存儲基於文本的信息。字符串所包含的字符存在從左至右的位置順序,不可以在原處(in-place)修改。Python沒有C語言的字符和字符串之分,只有字符串。從嚴格意義上
spring Boot學習入門篇-idea開發簡單的hello world例項
原文:http://www.zuidaima.com/blog/3386443542367232.htm 最近學習spring Boot,用Idea寫了一個簡單的例項,分享給有需求的牛牛們. 1.idea建立一個完整的maven專案 專案完整結構: 2.開
springboot2.X學習第二篇helloworld之pom分析
對於上一篇關於helloworld程式的分析,我準備分為三大塊進行分析:pom.xml檔案,App.java,HelloController.java 1,pom.xml檔案分析 <?xml version="1.0" encoding="UTF-8"?> <pro
思維導圖學習 | 第二篇:java學習基礎,讓java不再難懂【中篇】
配套Ximnd學習導圖下載地址 寫在最後 歡迎關注、喜歡、和點贊後續將推出更多的思維導圖學習文章,敬請期待。 歡迎關注我的微信公眾號獲取更多更全的學
AngularJs 學習第二篇 之過濾器
AngularJS 過濾器 uppercase 過濾器將字串格式化為大寫: <div ng-app = "myApp" ng-controller = "myCtrl"> <p>姓名為:{{name | uppercas
golang學習第二篇 開發環境的搭建
開發環境的搭建 由於重點在學習,關於開發環境的搭建,簡單介紹下,不做太詳細的介紹。 一、linux下golang環境搭建 ubuntu、debian等系統通過 sudo apt-get instal
spaCy 學習 第二篇:語言模型
文本 除了 rip exc 一個 tokenize 常見 ear one spaCy處理文本的過程是模塊化的,當調用nlp處理文本時,spaCy首先將文本標記化以生成Doc對象,然後,依次在幾個不同的組件中處理Doc,這也稱為處理管道。語言模型默認的處理管道依次是:tagg
SpringBoot 2.X課程學習 | 第二篇:讓依賴管理更加便捷(Dependency Management)
一、前言 傳統我們搭建SSM專案的時候,使用maven做jar依賴管理的
sklearn 學習 第二篇:特徵預處理
sklearn.preprocessing包提供了幾個常用的轉換函式,用於把原始特徵向量轉換為更適合估計器的表示。 轉化器(Transformer)用於對資料的處理,例如標準化、降維以及特徵選擇等,提供的函式大致是: fit(x,y):該方法接受輸入和標籤,計算出資料變換的方式。 transform
Java進階學習第二十四天(Spring框架:事務管理、Spring與Hibernate整合)
一、事務控制 1、引入 使用者訪問 > Action > Service > Dao 如何保證: 在service中呼叫2次dao,其中一個dao執行失敗,整個操作要回滾 2、事務控制概述 ① 程式設計式事務控制:自己手動控制事務 Jdbc程式
Spring Boot入門第二天:一個基於Spring Boot的Web應用,使用了Spring Data JPA和Freemarker。
per pan let mysq 應用 posit ble host thead 今天打算從數據庫中取數據,並展示到視圖中。不多說,先上圖: 第一步:添加依賴。打開pom.xml文件,添加必要的依賴,完整代碼如下: <?xml version="1.0" enco