Java開發學習心得(一):SSM環境搭建 有一點.NET的開發基礎,在學校學過基礎語法,對JAVA有點興趣,就簡單學習了一下,記錄一下從哪些方面入手的,暫時不打算深入到原理方面,先簡單搭下環境看看,所以有些地方可能講得不慎準確。 1 SSM框架 從網上的討論來看,SSM框架似乎正在慢慢被Sprin ...
Java開發學習心得(一):SSM環境搭建
有一點.NET的開發基礎,在學校學過基礎語法,對JAVA有點興趣,就簡單學習了一下,記錄一下從哪些方面入手的,暫時不打算深入到原理方面,先簡單搭下環境看看,所以有些地方可能講得不慎準確。
1 SSM框架
從網上的討論來看,SSM框架似乎正在慢慢被Spring Cloud的取代。
1.1 Spring Framework
Spring是一個開源的Java/Java EE全功能棧(full-stack)的應用程式框架,以Apache License 2.0開源許可協議的形式發佈,也有.NET平臺上的移植版本。該框架基於 Expert One-on-One Java EE Design and Development(ISBN 0-7645-4385-7)一書中的代碼,最初由Rod Johnson和Juergen Hoeller等開發。
Spring Framework提供了一個簡易的開發方式,這種開發方式,將避免那些可能致使底層代碼變得繁雜混亂的大量的屬性文件和幫助類。 簡單來說,Spring是一個輕量級的 控制反轉(IoC) 和 面向切麵(AOP) 的容器框架。
如果學習JAVA Spring,這兩個東西應該是繞不開的,但是暫時理解不深刻,後面準備深入到代碼實現層面,與.NET進行一些比較。
控制反轉 IoC(Inversion of Control)
在IoC出現以前,組件之間的協調關係是由程式內部代碼來控制的,或者說,以前我們使用New關鍵字來實現兩組間之間的依賴關係的。
這種方式就造成了組件之間的互相耦合。IoC(控制反轉)就是來解決這個問題的,它將實現組件間的關係從程式內部提到外部容器來管理。
也就是說,由容器在運行期將組件間的某種依賴關係動態的註入組件中。
依賴註入(Dependency Injection):這就是DI,字面上理解,依賴註入就是將服務註入到使用它的地方。對象只提供普通的方法讓容器去決定依賴關係,容器全權負責組件的裝配,它會把符合依賴關係的對象通過屬性(JavaBean中的setter)或者是構造子傳遞給需要的對象。
相對於IoC而言,依賴註入(DI)更加準確地描述了IoC的設計理念。所謂依賴註入,即組件之間的依賴關係由容器在應用系統運行期來決定,也就是由容器動態地將某種依賴關係的目標對象實例註入到應用系統中的各個關聯的組件之中。
面向切麵編程 AOP(aspect-oriented programming)
POP面向過程程式設計
OOP面向對象的程式設計
微服務
1.2 Spring MVC
Spring MVC屬於SpringFrameWork的後續產品,已經融合在Spring Web Flow裡面。Spring MVC 分離了控制器、模型對象、分派器以及處理程式對象的角色,這種分離讓它們更容易進行定製。
1.2.1 spring boot
Spring Boot就是Spring,它做了那些沒有它你也會去做的Spring Bean配置。它使用“習慣優於配置”(項目中存在大量的配置,此外還內置了一個習慣性的配置,讓你無需手動進行配置)的理念讓你的項目快速運行起來。使用Spring Boot很容易創建一個獨立運行(運行jar,內嵌Servlet容器)、準生產級別的基於Spring框架的項目,使用Spring Boot你可以不用或者只需要很少的Spring配置。
正常的Spring MVC構建需要
- 一個項目結構,其中有一個包含必要依賴的Maven或者Gradle構建文件,最起碼要有Spring MVC和Servlet API這些依賴。
- 一個web.xml文件(或者一個WebApplicationInitializer實現),其中聲明瞭Spring的DispatcherServlet。
- 一個啟動了Spring MVC的Spring配置
- 一控制器類,以“hello World”相應HTTP請求。
- 一個用於部署應用程式的Web應用伺服器,比如Tomcat。
spring boot 特點
- 自動配置:針對很多Spring應用程式常見的應用功能,Spring Boot能自動提供相關配置
- 起步依賴:告訴Spring Boot需要什麼功能,它就能引入需要的庫。
- 命令行界面:這是Spring Boot的可選特性,藉此你只需寫代碼就能完成完整的應用程式,無需傳統項目構建。
- Actuator:讓你能夠深入運行中的Spring Boot應用程式,一套究竟。
使用Spring Boot的方法之一:Spring Initializr
通過Web構建 http://start.spring.io/
IDEA
目前IDEA只支持Java8的JDK
Apache Maven,是一個軟體(特別是Java軟體)項目管理及自動構建工具,由Apache軟體基金會所提供。基於項目對象模型(Project Object Model,POM)概念,Maven利用一個中央信息片斷能管理一個項目的構建、報告和文檔等步驟(生命周期)。
選擇需要的依賴
- pom.xml
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.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>
<!-- 添加classpath依賴 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 開發者工具,當classpath下有文件更新自動觸發應用重啟 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!-- maven編譯插件,用於創建可執行jar包 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
構建啟動的三種方式
- 在IDE(或者命令行工具中的java)啟動main函數,IDE中一般都自帶Maven,能夠幫助我們下載安裝Maven依賴。
- 運行mvn spring-boot:run命令,但是此種方法要求你在本地環境中必須安裝Maven
使用命令行有兩種方式,一種是直接找到Maven項目視圖中的spring boot啟動命令直接運行
另一種是直接輸入命令
- 使用mvn package命令進行打包,生成一個可以直接運行的 JAR 文件,路徑是項目文件中的target目錄,使用“java -jar”命令就可以直接運行。
不管使用哪種方法都可以啟動項目,然後訪問http://localhost:8080就可以打開網站看到控制器裡面的內容了
應用入口
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class DemoApplication {
@RequestMapping("/")
public String index(){
return "Hello Spring Boot";
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
對main函數所在的類進行修改,時期能接收Http請求並返回內容。
- main()方法啟動了一個HTTP伺服器程式,這個程式預設監聽8080埠,並將HTTP請求轉發給我們的應用來處理
- @Controller標註表示Application類是一個處理HTTP請求的控制器,該類中所有被@RequestMapping標註的方法都會用來處理對應URL的請求,@ResponseBody標註告訴Spring MVC直接將字元串作為Web響應(Reponse Body)返回,如果@ResponseBody標註的方法返回一個對象,則會自動將該對象轉換為JSON字元串返回
- index()方法上包含@GetMapping("/")標註,意味著在瀏覽器中訪問http://localhost:8080/(不考慮協議、host和port信息後的路徑為"/")後瀏覽器發送的請求會交給該方法進行處理
- index()方法直接返回一個字元串,那麼相當於直接將字元串"Hello World"作為HTTP請求的響應返回給瀏覽器,於是我們在瀏覽器中可以看到相應的返回值