티스토리 뷰

저번 포스팅에서 살펴봤던 자동 설정을 실습을 통하여 살펴보고자 한다.

 

먼저, AutoConfigure를 제공할 프로젝트를 생성하고 아래의 과정을 진행한다.

 

(물론 해당 의존성을 주입받을 프로젝트도 준비하자.)

 

Step 1. Creation AutoConfigure Project

1. pom.xml

<groupId>chany</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>

    <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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-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. Domain Class 생성

public class Chany {

    String name;
    Long id;
	
	// Getter Setter toString ..
}

 

3. Configuration Class 생성

@Configuration
public class ChanyConfiguration {

    @Bean
    public Chany chany() {
        Chany chany = new Chany();
        chany.setId(1);
        chany.setName("yeol2");
        return chany;
    }
}

 

4. spring.factories 생성

Resource/META-INF에 spring.factories (서비스 프로바이더와 유사한 개념) 파일을 생성

# spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  chany.ChanyAutoConfiguration

 

5. Maven Install

Maven을 사용하는 다른 프로젝트에서 사용할 수 있도록 로컬 메이븐 저장소에 설치

 

 


Step 2. Usage in Main Project

 

1. Dependency Injection 

해당 자동설정을 사용할 프로젝트에 dependency를 추가하여 주면 되는데 이때는 해당 자동 설정 파일의 groupId / actifactId / version 을 모두 명시.

<dependency>
	<groupId>chany</groupId>
	<artifactId>spring-boot-starter</artifactId>
	<version>1.0-SNAPSHOT</version>
</dependency>

 

2. Implementation Application Runner 

해당 프로젝트에 자동설정이 제대로 들어왔는지 확인하기 위해 ApplicationRunner를 구현

 

  • ApplicationRunner
     : Spring Boot app이 올라왔을 때 자동으로 실행되는 Bean을 만들고 싶을 때 사용
@Component
public class ChanyRunner implements ApplicationRunner {

    @Autowired
    Chany chany
    
    @Override
    public void run(ApplicationRunner args) throws Exception {
    	System.out.println(chany);
	}
}

 

이렇게 설정을 하면 Main Project에서는 별다른 설정 없이도 AutoConfigure에서 설정한 값을 그대로 사용할 수 있다.

 

하지만, Main Project에서 직접 Chany라는 Bean을 등록하고 값을 설정하면 이 값이 먹히지가 않는 현상이 발생한다.

즉, Component Scan을 통해서 직접 설정한 값이 Bean으로 등록된다고 하더라도 이후에 진행되는 EnableAutoConfigure에서 추가적인 Bean 등록이 이루어져 직접 설정한 Bean의 값이 Overwrite 되기 때문이다.

 

이 현상을 해결하기 위한 방법을 다음 포스팅에서 살펴보도록 하겠다.

 

 


@ 출처

 

 스프링 부트 개념과 활용 - inflearn, by 백기선님

댓글
링크
최근에 올라온 글
Total
Today
Yesterday