스프링 부트 개념과 활용
3. 스프링 부트 원리
포스팅 참조 정보
GitHub
공부한 내용은 GitHub에 공부용 Organizations에 정리 하고 있습니다
해당 포스팅에 대한 내용의 GitHub 주소
실습 내용이나 자세한 소스코드는 GitHub에 있습니다
포스팅 내용은 간략하게 추린 핵심 내용만 포스팅되어 있습니다
https://github.com/freespringlecture/springboot-concept-uses/tree/chap03-04-01-starter
해당 포스팅 참고 인프런 강의
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard
실습 환경
- Java Version: Java 11
- SpringBoot Version: 2.1.2.RELEASE
4. 자동 설정 만들기
SpringBoot 프로젝트 정의 패턴
Xxx-Spring-Boot-Autoconfigure
모듈: 자동 설정Xxx-Spring-Boot-Starter
모듈: 필요한 의존성 정의
xxx-spring-boot-starter
프로젝트 생성
xxx-spring-boot-starter
예제 프로젝트는 위의 사항을 통합하여 진행
Java 버전은 1.8에서 동작함
-
의존성 추가
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure-processor</artifactId> <optional>true</optional> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.1.2.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
-
Holoman model 클래스 생성
-
@Configuration
파일 HolomanConfiguration 생성 -
src/main/resource/META-INF에 spring.factories
파일 만들기 -
spring.factories
안에 자동 설정 파일 추가 -
mvn install
or Intellij에서 Maven 텝에Lifecycle
-install
클릭다른 Maven 프로젝트에서도 쓸 수 있도록 Local Maven 저장소에 설치를 함
-
다른 프로젝트에서 생성된 프로젝트 의존성 추가
-
Runner로 불러와서 사용
xxx-spring-boot-autoconfigure
프로젝트 생성
HolomanRunner 정의
@Component
public class HolomanRunner implements ApplicationRunner {
@Autowired
Holoman holoman;
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println(holoman);
}
}
Maven Repositories에 정의
stater 프로젝트를 install 해서 생성된 모듈을 dependency에 추가하면 autoconfigure로 자동 적용됨
<dependency>
<groupId>me.freelife</groupId>
<artifactId>springboot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
@ConfigurationProperties
- 빈 재정의 문제점
@SpringBootApplication
에서 @ComponentScan
으로 먼저 등록된 빈이 있으면 나중에 등록되는 빈은 무시됨
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(Application.class);
application.setWebApplicationType(WebApplicationType.NONE);
application.run(args);
}
@Bean
public Holoman holoman() {
Holoman holoman = new Holoman();
holoman.setName("freelifeBlack");
holoman.setHowLong(60);
return holoman;
}
}
덮어쓰기 방지하기
@ConditionalOnMissingBean
빈 재정의 수고 덜기
@ConfigurationProperties(“holoman”)
@EnableConfigurationProperties(HolomanProperties)
프로퍼티 키값 자동 완성
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
@ConditionalOnMissingBean
재정의 한 빈이 동작되도록 AutoConfiguration 프로젝트를 개선
xxx-spring-boot-starter
프로젝트에 빈 설정에 @ConditionalOnMissingBean
설정
@Configuration
public class HolomanConfiguration {
@Bean
@ConditionalOnMissingBean
public Holoman holoman() {
Holoman holoman = new Holoman();
holoman.setHowLong(5);
holoman.setName("freelife");
return holoman;
}
}
application.properties
에 정의 해서 쓰기
아래와 같이 설정하면 빈을 재정의 할 필요 없이 Properties만 재정의 하면됨
재정의된 빈이 있으면 재정의된 빈을 우선으로 적용함
xxx-spring-boot-starter
프로젝트 설정
1. HolomanProperties 파일 생성
@ConfigurationProperties("holoman")
public class HolomanProperties {
private String name;
private int howLong;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHowLong() {
return howLong;
}
public void setHowLong(int howLong) {
this.howLong = howLong;
}
}
2. Configuration 파일에 @EnableConfigurationProperties
설정 추가
HolomanProperties 를 주입받아 처리하도록 수정
@Configuration
@EnableConfigurationProperties(HolomanProperties.class)
public class HolomanConfiguration {
@Bean
@ConditionalOnMissingBean
public Holoman holoman(HolomanProperties properties) {
Holoman holoman = new Holoman();
holoman.setHowLong(properties.getHowLong());
holoman.setName(properties.getName());
return holoman;
}
}
'개발강의정리 > Spring' 카테고리의 다른 글
[스프링 부트 개념과 활용] 3-6. 내장 웹 서버 응용 1부: 컨테이너와 포트 (0) | 2019.10.18 |
---|---|
[스프링 부트 개념과 활용] 3-5. 내장 웹 서버 이해 (0) | 2019.10.17 |
[스프링 부트 개념과 활용] 3-3. 자동 설정 이해 (0) | 2019.10.15 |
[스프링 부트 개념과 활용] 3-2. 의존성 관리 응용 (0) | 2019.10.14 |
[스프링 부트 개념과 활용] 3-1. 의존성 관리 이해 (0) | 2019.10.13 |
댓글