본문 바로가기
Dev/Spring Boot

[스프링 부트 개념과 활용] 자동 설정 만들기 1부

by dev_jsk 2020. 8. 18.
728x90
반응형

Starter 와 AutoConfigure

프로젝트 생성

  • 자동설정 프로젝트의 경우 일반적으로 xxx-spring-boot-autoconfigure에 구성
  • 의존성 정의 관련 프로젝트의 경우 일반적으로 xxx-spring-boot-starter에 구성
  • 하나로 만들 경우 xxx-spring-boot-starter에 같이 구성
// pom.xml
<groupId>me.jsk</groupId>
<artifactId>jinseo-spring-boot-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>

 

구현 방법

1. 의존성 추가

//pom.xml
...
<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.0.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

2. Holoman.java, HolomanConfiguration.java 생성

// Holoman.java
public class Holoman {
String name;
int howLong;
getter/setter
toString
}
// HolomanConfiguration.java
@Configuration
public class HolomanConfiguration {
@Bean
public Holoman holoman() {
Holoman holoman = new Holoman();
holoman.setHowLong(5);
holoman.setName("Jinseo");
return holoman;
}
}

3. src/main/resource/META-INFspring.factories생성 및 자동 설정파일 추가

// spring.factories
#Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
me.jsk.HolomanConfiguration

4. Maven install

5. EduApplication Project에 의존성 추가

// pom.xml
<dependency>
<groupId>me.jsk</groupId>
<artifactId>jinseo-spring-boot-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>

6. HolomanRunner.java생성

// HolomanRunner.java
@Component
public class HolomanRunner {
@Autowired
Holoman holoman;
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println(holoman);
}
}

 

* 주의 사항

pom.xml<parent>spring-boot-starter버전과 dependencyManagementdependencies버전 일치시켜야 Maven install오류가 발생하지 않는다.

 

Bean 등록 순서 확인

// Application.java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
// SpringApplication.run(Application.class, args);
SpringApplication application = new SpringApplication(Application.class);
// Application 이 WebApplication 으로 작동하지 않도록 하는 옵션
application.setWebApplicationType(WebApplicationType.NONE);
application.run(args);
}
@Bean
public Holoman holoman() {
Holoman holoman = new Holoman();
holoman.setName("dev_jsk");
holoman.setHowLong(100);
return holoman;
}
}

위 코드 동작 시 결과는 Holoman{name='Jinseo', howLong=5}가 나타난다. @Bean등록 시 @ComponentScan@EnableAutoConfiguration이 사용되어 등록하게 되는데 @ComponentScan이 먼저 동작하여 Holoman{name='dev_jsk', howLong=100}을 Bean으로 등록하고 @EnableAutoConfiguration이 나중에 동작하여 자동설정 Bean을 덮어 씌우기 때문에 위와 같은 결과가 발생한다.

728x90
반응형

댓글