본문 바로가기
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
반응형

댓글