1. 서문
나는 한동안 Spring Boot를 공부 해 왔습니다. 나는 최근에 연구를 조직하고 최근에 당신과 공유 할 것입니다. 약 10 ~ 20 개의 블로그가 있습니다. 전체 시리즈는 간단한 블로그 시스템을 기반으로합니다. 이론에 대해 이야기하는 것만으로는 이해하기가 쉽지 않기 때문에 간단한 미니 프로그램을 통해 매번 일부 지식 포인트를 체계적으로 파악할 수 없으므로 간단한 시스템을 기반으로 스프링 부팅을 통해 완전한 시스템을 구현하는 방법을 살펴 보겠습니다. Spring Boot의 기본 지식 포인트 외에도이 시리즈에는 Spring Boot와 데이터베이스, 캐싱 (REDIS), 메시지 대기열 등의 조합 및 다중 인스턴스 배포가 포함됩니다. 관심있는 학생들은주의를 기울일 수 있습니다.
2. 스프링 부츠 소개
스프링 부츠는 봄을 기반으로한다는 이름에서 볼 수 있으므로 봄에 익숙하지 않은 학생들은 봄을 먼저 배워야합니다. 둘째, Spring Boot는 일반적으로 사용되는 많은 기능을 통합하여 전체 구성을 더 간단하게 만듭니다. Spring을 사용한 학생들은 Spring이 구성의 복잡성을 줄이기 위해 열심히 노력했지만 로그, 데이터베이스, 캐시 등 구성과 같은 완전히 사용 가능한 (웹) 환경을 구성한 다음 Tomcat 구성 및 Tomcat 디렉토리에 프로그램을 게시하는 것은 여전히 어려운 일이라는 것을 알아야합니다. Spring Boot는이 프로세스를 크게 단순화했습니다. 많은 스타터를 제공하고 해당 JAR 패키지를 소개합니다. 예를 들어 Tomcat을 통합하고 Tomcat의 스타터를 소개해야합니다.
<pectionency> <groupId> org.springframework.boot </groupid> <artifactid> 스프링 부트 스타터-톰카 </artifactid> </fectionency>
참고 :이 기사의 예제는 모두 Maven을 기반으로하므로 Maven에 익숙하지 않은 경우 먼저 사용 방법을 볼 수 있습니다. Gradle에 익숙하다면 상황에 따라 구성에 해당하는 조정을 할 수도 있습니다.
공식 문서에서 Spring Boot가 제공 한 스타터를 볼 수 있습니다.
여기서는 작은 부분 만 차단했으며 Spring Boot가 캐싱, 배치 처리, MQ, ES 등을 지원하는 것을 알 수 있습니다. 전체 목록은 공식 문서를 참조하십시오. 나는 다른 것을 많이 설명하지 않을 것입니다. 예제를 통해 전체 스프링 부팅 기능을 설명하겠습니다. 먼저 Spring Boot를보고 Hello World의 웹 버전을 구현합시다!
3. Hello World 프로그램
3.1 Hello World 소스 코드
1 단계 : JAR 패키지를 가져옵니다
<부모> <groupid> org.springframework.boot </groupid> <artifactid> Spring-boot-starter-parent </artifactid> <bersion> 1.5.8. release </version> </parent> <pecient <spection> <groupid> org.springframework.boot </groupid> <artifactid> spring-sparatid> </종속성> </종속성>
2 단계 : 컨트롤러 클래스를 작성하십시오
package com.pandy.blog; import org.springframework.steretype.controller; import org.springframework.beb.bind.annotation.requestmapping; import org.spramframework.bind.bind.annotation.respronse; import java.util.hashmap;@controllerpublic helloworld {@requestmapping ( "/hello") @responsebody public map <string, object> hello () {map <string, object> map = new Hashmap <> (); map.put ( "Hello", "World"); 리턴 맵; }}3 단계 : 시작 클래스 작성 (라이브러리 입력)
패키지 com.pandy.blog; import org.springframework.boot.springApplication; import org.springframework.boot.autoconfigure.springbootApplication; @springbootApplicationPublic 클래스 응용 프로그램 {public static void main (String [] args) 예외 {springApplication.run (application.run); }}이 클래스의 주요 방법을 실행 한 다음 http : // localhost : 8080/hello를 방문하면 다음 결과를 볼 수 있습니다.
당신은 매우 행복하다고 느끼십니까? 한 줄의 구성이없는 경우 웹 응용 프로그램을 직접 실행할 수 있습니다. 그러나 행복한 후에 이것이 어떻게 달성되는지 생각해 본 적이 있습니까? 다음으로 위의 코드를 한 줄씩 구문 분석합니다. 라인은 많지 않지만 여전히 배우고 이해할 가치가있는 것들이 여전히 많이 있습니다.
3.2 POM 파일 분석
POM 파일에서 두 가지 종속성 만 소개하는 POM 파일부터 시작하겠습니다. 첫 번째는 스프링 부트 스타터 부모입니다. Maven에 익숙한 친구들은 Maven이 클래스와 같은 부모 POM 파일에서 구성을 상속받을 수 있음을 알아야합니다. Spring-Boot-Starter-Parent의 POM 파일을 볼 수 있습니다. 공간 문제로 인해 여기서는 두 부분 만 살펴 봅니다. 다른 것들은 이해하기가 더 쉽습니다. 당신은 그들 직접 읽을 수 있습니다. 첫 번째 부분은 다음과 같습니다.
이 파일은 다른 POM 파일, 즉 스프링 부트 의존성을 상속합니다. 이 파일에는 실제로 많은 항아리가 포함되어 있으며 그 기능은 Spring Boot가 의존하는 JAR 패키지의 버전을 균일하게 관리하는 것입니다. 따라서 나중에 항아리를 각 구성 요소에 소개 할 때 버전 번호를 지정할 필요가 없음을 알 수 있습니다. 설명해야 할 또 다른 요점은 구성 파일 관리입니다.
보시다시피, 기본적으로/src/main/resources 디렉토리의 파일은 자원 파일로 클래스 경로에 추가됩니다. 또한이 장소는 Application*.yml, application*.yaml 및 application*.properties의 세 가지 파일 만 필터링합니다. 이 필터는 무엇을 의미합니까? Spring MVC를 구성한 사람은 데이터베이스를 구성 할 때 일반적으로 속성 파일에서 데이터베이스 정보를 구성한 다음 <property name = "driverclass"value = "$ {jdbc.driver}" />의 형식을 통해 스프링 구성 파일에 소개한다는 것을 알아야합니다. 이 필터의 기능은 구성 파일에 구성된 이름 값 쌍을 컴파일하는 동안 스프링 구성 파일의 $ {xxx} 문자로 바꾸는 것이지만이 기능은 필요하지 않습니다. 교체되지 않더라도 Spring은 런타임에서 구성 항목을 읽을 수 있습니다.
요약하려면 : 스프링 부트 스타터 부모의 역할 :
1) JAR 패키지 관리.
2) 기본 구성 파일 관리.
3) 일반적인 플러그인 관리.
실제로, 무엇에 대한 분석에서, 우리는 Spring-Boot-Starter-Parent의 핵심 기능이 Spring Boot가 의존하는 모든 JAR 패키지를 관리하는 것임을 알 수 있습니다. 그러나 부모 방법에는 명백한 문제가 있습니다. 많은 회사에는 자신의 부모 파일이 있으며 Maven은 여러 부모를 구성 할 수 없습니다. 스프링 부트 스타터 부모가 사용되지 않으면 어떻게해야합니까? JAR 패키지를 하나씩 가져와야합니까? 실제로 Spring Boot는이 문제를 해결하는 또 다른 방법을 제공합니다.이 문제는 Spring Boot의 종속성 관리를 자체 POM 파일에 추가하는 것입니다.
<pectionencymanagement> <pectinements> <pectionement> <groupId> org.springframework.boot </groupid> <artifactid> spring-boot-delpencies </artifactid> <bersion> 1.5.9. Release> <type> pom </type> </scope> import> </eppendency> </dependency> </dependency> </종속성> </종속성> </종속성> </종속성> </종속성> </의존성> </종속성> </종속성> </종속성> </종속성> </종속성> </종속성> </종속성> </dependency> </dependency> </dependency> </dependency> </dependency> </dependency> </dependency> </종속성> </종속성> </종속성> </종속성> </종속성> </의존성> </종속성> </종속성> </종속성> </종속성> </종속성> </종속성> </종속성> </dependency> </dependency> </dependency> </dependency> </dependency> </dependency> </dependency> 매
실제로, 위의 분석에서, 우리는 이것이 스프링 부트 스타터 부모 POM 파일의 부모임을 알 수 있으며,이 POM 파일은 주로 많은 JAR 패키지를 관리합니다. 따라서이 수입을 가져온 후에는 가져 오기 위해 하나씩 단호 할 필요가 없습니다. 그러나이 경우 Spring-Boot-Starter-Parent의 플러그인은 사용되지 않으며 기본 구성 파일 교체 기능을 더 이상 사용할 수 없습니다. 그러나 이것은 효과가 없습니다. 한편으로, 이러한 기능은 필요하지 않으며 반면에 필요한 경우 직접 추가하기 쉽습니다.
3.3 Helloworld 클래스 분석 :
Helloworld 수업을 살펴 보겠습니다. Spring MVC를 사용한 후이 클래스는 Spring Boot와 관련이 없으며 비즈니스 코드에는 Spring과 관련된 것이 없다는 것을 알아야합니다. 이것은 또한 Spring이 항상 준수 한 원칙이며, 매우 침습적이며 봄의 성공의 주된 이유이기도합니다. 이 클래스에는 스프링과 관련된 세 가지 주석, 즉 @controller, @requestmapping 및 @responsebody가 있지만이 세 가지 주석은 Spring MVC에서도 제공됩니다. Spring Boot와는 별다른 관련이 없으므로 여기서는 자세히 설명하지 않습니다. 명확하지 않으면 Spring MVC의 내용을 확인할 수 있습니다. 세 가지 주석의 기본 기능은 다음과 같습니다.
3.4 응용 프로그램 클래스 분석
마지막으로, 응용 프로그램 클래스를 살펴보면이 수업에 더 적은 것이 있음을 알게 될 것입니다. 유용한 코드에는 총 하나의 줄, 즉 SpringApplication.run (application.class, args)이 있습니다. 이 방법의 기능은 응용 프로그램 클래스를로드하는 것입니다. 그렇다면 애플리케이션 클래스에 특별한 것이 있습니까? 당신은 볼 수 있습니다. 실제로이 클래스의 유일한 특별한 점은 주석 @SpringBootApplication이므로 Spring Boot의 작동은이 주석과 많은 연결이 있어야합니다. 이 주석의 소스 코드를 볼 수 있습니다.
@TARGET (elementType.type) @retention (rendentionpolicy.runtime)@documented@inherited@springbootconfiguration@componentscan (excludefilters = {@filter (type = filtertype.custom, classes = filexcludefilter.class), class) = autoconfigurationExcludeFilter.class)}) public @Interface springbootApplication {이 주석의 주요 방법에 대해서는 이야기하지 않을 것입니다. 당신은 그것을 읽은 후에 볼 수 있습니다. 주로 위의 주석에 대한 별칭을 제공하는 것입니다. 모든 사람은 처음 4 개의 주석 (@target (elementtype.type), @retention (retentionpolicy.runtime), @documented, @inherited)가 위에서 언급되어 있음을 알아야합니다. 그것에 익숙하지 않은 친구들은 JDK가 맞춤형 주석을 구현하는 방법을 살펴볼 것입니다. 다음 세 가지 주석을 자세히 설명해 봅시다 : @springbootconfiguration, @enableautoconfiguration, @componentscan.
먼저 SpringBootConfiguration을 살펴 보겠습니다. 이 주석은 비교적 간단하며 소스 코드는 다음과 같습니다.
@TARGET ({ElementType.type})@retention (rendentpolicy.runtime)@documented@configurationpublic @interface springbootconfiguration {}이 주석은 @configuration 만 상속합니다. 스프링은 세 가지 구성 방법을 제공한다는 것을 알아야합니다. (1) XML 파일 구성 (2) 주석 구성 (3) Java 클래스 구성. @Configuration은 클래스를 구성 클래스로 식별하는 데 사용되는 주석입니다. 스프링 4 이후, 구성은 Java 클래스에서 더 인기가 있으므로 Spring Boot도 이런 식으로 인기가 있습니다. 소스 코드에서 SpringBootConfiguration의 기능은 클래스를 구성 클래스로 식별하는 것임을 알 수 있습니다.
다음으로 @enableautoconfiguration 주석을 살펴 보겠습니다. 이 주석의 소스 코드는 약간 복잡합니다. 나는 여기에서 자세히 설명하지 않을 것입니다. 나중에 기사에서 자세히 구현하겠습니다. 이 주석의 기능에 대해 이야기하겠습니다. 주요 기능은 자동 구성을 구현하는 것입니다. 자동 구성이란 무엇입니까? Spring Boot는 소개 한 JAR 패키지를 기반으로 자동 구성을 만듭니다. 예를 들어, ClassPath에 HSQLDB JAR이있는 경우 Spring Boot는 자동으로 메모리 데이터베이스를 구성합니다. 이 예에서는 Spring-MVC, Tomcat 및 기타 관련 항아리를 도입했기 때문에 Spring Boot는 귀하가 웹 프로젝트라고 추측하고, 정적 자원에 대한 지원, 반환 된 결과를 JSON 형식 데이터로 자동 변환에 대한 지원과 같은 일부 스프링 MVC 구성을 자동으로 수행 할 것임을 알 수 있습니다. Spring Enable* 주석에 익숙한 학생들은 봄에 비슷한 주석이 많기 때문에이 주석을 더 쉽게 이해할 수 있어야합니다.
마지막으로 @componentscan을 살펴 보겠습니다. 이 주석은 Spring Boot에서 제공하지 않지만 Spring에서 제공합니다. 스프링으로 스캔 한 패키지 또는 클래스, 즉 패키지 및 클래스는 스프링 IOC 컨테이너 관리에 자동으로 포함됩니다. IOC는 구성에 따라 이러한 클래스를 인스턴스화합니다.
이제 SpringBootConfiguration 주석의 기능을 요약하겠습니다.
1)이 클래스는 구성 클래스라고 표시하십시오.
2) 스캔 된 패키지를 지정하여 스프링 IOC 컨테이너가 인스턴스 및 수명주기를 관리 할 수 있도록 촉진합니다.
3) 자동 구성 및 도입 된 JAR 패키지를 사용하여 사용자의 의도를 자동으로 구성하려는 의도를 추측하십시오.
4. 요약
이 기사는 Spring Boot에서 구현 한 Hello World의 웹 버전을 분석합니다. 이 예를 통해 Spring Boot의 기본 작업을 이해하고 각 라인의 코드 분석을 통해 Spring Boot의 원칙에 대한 대략적인 이해가 있습니다. 전반적으로 Spring Boot는 JAR 패키지를 균일하게 관리 한 다음 선택한 스타터에 따라 자동으로 구성합니다. 이러한 방식으로 복잡한 종속성 관리를 해결하고 구성을 간소화하여 개발자가 매우 복잡한 구성 작업을 수행하지 않고도 비즈니스에 더 집중할 수 있도록합니다. 동시에 Spring Boot의 빠르고 가벼운 서비스는 마이크로 서비스 아키텍처에도 매우 적합합니다. 후속 조치 기회가 있다면 이것을 공유하겠습니다. 계속 따라 오신 것을 환영합니다.