자동 설정 만들기

Crow·2021년 8월 2일
0
post-thumbnail

학습목표

  • Starter와 AutoConfigure
  • @ConfigurationProperties

Starter와 AutoConfigure

  • auto configure 모듈 : 자동 설정
  • starter : 필요한 의존성 정의
  • 위 둘을 묶어서 하나의 starter로 만든다.

구현 방법

  1. 의존성 추가
<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.5.3</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>
  1. @Bean으로 등록할 class 파일 및 @Configuration 파일 작성

    ex. @Bean으로 등록할 class 파일 - Holoman.java

public class Holoman {
    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;
    }

    @Override
    public String toString() {
        return "Holoman{" +
                "name='" + name + '\'' +
                ", howLong=" + howLong +
                '}';
    }
}

ex. @Configuration 파일 - HolomanConfiguration.java

@Configuration
public class HolomanConfiguration {

    @Bean
    public Holoman holoman(){
        Holoman holoman = new Holoman();
        holoman.setHowLong(26);
        holoman.setName("linger0310");
        return holoman;
    }
}
  1. src/main/resource/META-INF에 spring.factories 파일 만들기

  2. spring.factories 에 아래의 코드를 추가한다.
    Key : org.springframework.boot.autoconfigure.EnableAutoConfiguration
    Values : 패키지 이름.생성한 Configuration 파일 이름들

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  패키지 이름.생성한 Configuration 파일 이름
  1. mvn install

이러한 과정으로 등록시킨 Bean은 타 프로젝트에서 의존성 추가를 해주면 사용가능하다.

EnableAutoConfiguration로 등록한 Bean을 타 프로젝트에서 사용하는 법

Bean과 Bean Config를 정의한 starter-and-autoconfigure 프로젝트

init이라는 타 프로젝트에서 starter-and-autoconfigure 프로젝트의 의존성을 추가

External Libraries에 추가된 것을 확인

@ConfigurationProperties

EnableAutoConfiguration로 가져온 Bean을 가져와서 이를 적절히 재정의 후
사용하려고 하면 재정의가 반영되지 않고 초기 가져온 설정이 반영될 수가 있다.

해결책

방법1. @ConditionalOnMissingBean

  • 해당 어노테이션을 EnableAutoConfiguration로 가져올 Bean의 Config 부분에
    사용해주면 재정의가 반영된다.

ex

@Configuration
public class HolomanConfiguration {

    @Bean
    @ConditionalOnMissingBean

    public Holoman holoman(){
        Holoman holoman = new Holoman();
        holoman.setHowLong(26);
        holoman.setName("linger0310");
        return holoman;
    }
}

방법2. @ConfigurationProperties로 좀 더 깔끔히 처리하기.

  • 2-1. Bean과 Bean Config를 정의한 프로젝트에 의존성을 하나 추가한다.
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
  <optional>true</optional>
</dependency>
  • 2-2. Bean과 Bean Config를 정의한 프로젝트에 Bean Config 파일을 생성하듯이 Bean Properties 파일을 생성하여 정의한다.

ex

@ConfigurationProperties("holoman (application.properties에서 사용할 이름)")
public class HolomanProperties {
    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;
    }

    private String name;
    private int howLong;
}
  • 2-3. Bean을 auto configure로 가져와 쓸 프로젝트의 application.properties에 Bean에 대한 setter 값들을 넣어준다.

    ex

holoman.name = cyj
holoman.how-long = 100
  • 2-4. Bean Config가 Bean Properties를 참조할 수 있도록 @EnableConfigurationProperties(Bean Properties.class) 어노테이션을 추가한다. 또한 Bean에 Bean Properties를 인자로 주입 해주고, setter 값들로 Bean Properties 의 getter 값들을 넣어준다.

    ex

@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;
    }
}

방법1이든, 방법2이든 최종적으로는 Bean에 대하여 mvn install을 해줘야 변경 결과 반영됨..

profile
올빼미를 사냥한 까마귀에서 진화한 독수리

0개의 댓글

관련 채용 정보