springboot 자체 starter 구축

머리말
다음은 예제 를 통 해 자신의 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      

좋은 웹페이지 즐겨찾기