springboot 자체 starter 구축
8618 단어 springboot클 라 우 드 마이크로 서비스
다음은 예제 를 통 해 자신의 starter pom 을 구축 하고 자동 설정 을 완성 하여 spring boot 의 작업 원 리 를 더욱 깊이 이해 합 니 다.
수요
이 starter 는 PersonService 를 제공 하고 PersonService 를 자동 으로 설정 합 니 다.
Maven 프로젝트 새로 만 들 기
프로젝트 pom 의존 은 다음 과 같 습 니 다.
4.0.0
com.chhliu.springboot.starter.helloworld
springboot-starter-helloworld
0.0.1-SNAPSHOT
jar
UTF-8
UTF-8
1.8
org.springframework.boot
spring-boot-autoconfigure
1.4.3.RELEASE
org.springframework.boot
spring-boot-configuration-processor
1.4.3.RELEASE
true
org.springframework.boot
spring-boot-maven-plugin
2. 자동 설정 클래스 생 성이 부분 에 대해 잘 모 르 는 것 이 있 으 면 제 다른 블 로그 spring boot 의 다 중 환경 설정 지원 을 참고 하 십시오.
package com.chhliu.springboot.starter.helloworld;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* :
* @author chhliu
* :2017 2 13 9:05:34
* @version 1.2.0
*/
@ConfigurationProperties(prefix="person.proterties.set")// application.properties
public class PersonServiceProperties {
//
private String name;
//
private int age;
// , person.proterties.set=man
private String sex = "man";
//
private String height;
//
private String weight;
…… getter,setter ……
}
3. 서비스 클래스 작성package com.chhliu.springboot.starter.helloworld.service;
import com.chhliu.springboot.starter.helloworld.PersonServiceProperties;
public class PersonService {
private PersonServiceProperties properties;
public PersonService(PersonServiceProperties properties){
this.properties = properties;
}
public PersonService(){
}
public String getPersonName(){
return properties.getName();
}
public int getPersonAge(){
return properties.getAge();
}
public String getPersonSex(){
return properties.getSex();
}
}
4. 자동 설정 클래스package com.chhliu.springboot.starter.helloworld.configuration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.chhliu.springboot.starter.helloworld.PersonServiceProperties;
import com.chhliu.springboot.starter.helloworld.service.PersonService;
@Configuration //
@EnableConfigurationProperties(PersonServiceProperties.class) //
@ConditionalOnClass(PersonService.class)// PersonService , Bean ,
@ConditionalOnProperty(prefix="person.proterties.set", value="enabled", matchIfMissing=true)//
public class PersonServiceAutoConfiguration {
@Autowired
private PersonServiceProperties properties;
@Bean
@ConditionalOnMissingBean(PersonService.class)// Bean , PersonService
public PersonService personService(){
PersonService personService = new PersonService(properties);
return personService;
}
}
5. 등록 설정1. src / main / resources 에 META - INF 폴 더 를 새로 만 듭 니 다.
2. META - INF 폴 더 아래 에 spring. factories 파일 을 새로 만 듭 니 다.
메모: spring. factories 는 필수 가 아 닙 니 다. 시작 클래스 에 다음 주 해 를 추가 하여 자동 으로 설정 할 수 있 습 니 다.
@ImportAutoConfiguration({PersonServiceAutoConfiguration.class})
3. 등록 설정 자동 설정 클래스
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.chhliu.springboot.starter.helloworld.configuration.PersonServiceAutoConfiguration
6. 위 에 구 축 된 starter 를 로 컬 에 설치 합 니 다.
:
mvn clean install
7. spring boot 프로젝트 를 새로 만 들 고 위의 starter 를 의존 합 니 다.
4.0.0
com.chhliu.springboot.starter.person
springboot-starter-person
0.0.1-SNAPSHOT
jar
org.springframework.boot
spring-boot-starter-parent
1.5.1.RELEASE
UTF-8
UTF-8
1.8
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-web
com.chhliu.springboot.starter.helloworld
springboot-starter-helloworld
0.0.1-SNAPSHOT
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
8. application. properties 설정 파일 에 속성 추가person.proterties.set.name=chhliu
person.proterties.set.age=28
person.proterties.set.sex=woman
person.proterties.set.height=160
person.proterties.set.weight=50kg
9. 컨트롤 러 작성package com.chhliu.springboot.starter.person.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.chhliu.springboot.starter.helloworld.service.PersonService;
@RestController
public class PersonServiceController {
@Autowired // PersonService
private PersonService personService;
@GetMapping("get/name")
public String getPersonName(){
return personService.getPersonName();// PersonService
}
@GetMapping("get/sex")
public String getPersonSex(){
return personService.getPersonSex();
}
}
10. 테스트브 라 우 저 에 입력http://localhost:8080/get/sex
테스트 결 과 는 다음 과 같다.
woman
우리 가 사용자 정의 starter 를 사용 하 는 과정 에서 PersonService 인 스 턴 스 대상 을 만 들 지 않 고 @ Autowired 주 해 를 통 해 자동 주입 을 실현 한 것 을 발 견 했 습 니 다. 진정한 자동 주입 과정 은 starter 에서 이 루어 진 것 입 니 다. 위의 몇 걸음 을 통 해 자신의 starter 를 구축 하고 spring boot 에서 이 루어 졌 습 니 다.공식 적 으로 제공 하 는 starter 를 제외 하고 제3자 도 많은 starter 를 제공 했다. 이런 방식 을 통 해 spring boot 에 대한 확장 이 매우 크다.11. 지식 연장
starter 를 구축 하 는 과정 에서 주석 과 관련 되 는데 여기 서도 통 일 된 설명 을 합 니 다.
@ConditionalOnBean: Bean
@ConditionalOnClass:
@ConditionalOnExpression: SpEL
@ConditionalOnJava: JVM
@ConditionalOnJndi: JNDI
@ConditionalOnMissingBean: Bean
@ConditionalOnMissingClass:
@ConditionalOnNotWebApplication: Web
@ConditionalOnProperty:
@ConditionalOnResource:
@ConditionalOnSingleCandidate: Bean , Bean , Bean
@ConditionalOnWebApplication: Web
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.