ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [스프링 부트 개념과 활용] 자동 설정 @EnableAutoConfiguration
    SPRING/스프링부트 개념과 활용 2020. 12. 13. 23:22

    메인 클래스에 붙어 있는 @SpringBootApplication은 크게 3가지가 합쳐져 있다고 볼 수 있다.
    1. @SpringBootConfiguration
    2. @ComponentScan
    3. @EnableAutoConfiguration

     

    스프링 부트 어플리케이션은 Bean을 2번 등록한다.

    처음에 ComponentScan으로 통하여 등록하고, 그 후에 EnableAutoConfiguration으로 추가적인 Bean들을 읽어서 등록한다.

     

    @ComponentScan 은 아래와 같은 Component들을 Scan 합니다.

    • @Component
    • @Configuration @Repository @Service @Controller @RestController

    @EnableAutoConfiguration

    AutoConfiguration은 Bean을 등록하는 자바 설정 파일이다.

    spring.factories 내부에 여러 Configuration 들이 있고, 조건에 따라 Bean을 등록한다.

     

     

    아래와 같이 의존성을 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>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-configuration-processor</artifactId>
                <optional>true</optional>
     </dependency>

     

    아래 스크린샷과 같이 클래스를 생성합니다.

    Configuration 작성

    -> @EnableConfigurationProperties 어노테이션을 이용하여 Property 파일 관련 설정을 합니다.

    -> @ConditionalOnMissingBean은 Component Scan단에서 Bean이 등록되어 있지 않을 때에만, 아래의 Bean이 등록되도록 하는 설정이다.

    (스프링부트는 Bean을 2번 등록하는데, 먼저 componentScan을 하고, 그 다음에 EnableAutoConfiguration을 하기때문에, 새로 만들어준 Bean이 componentScan에 의해 먼저 등록된 후에 EnableAutoConfiguration에 의해 덮어써진다.)

    @Configuration
    @EnableConfigurationProperties(JumpProperties.class)
    public class JumpConfiguration {
    
        @Bean
        @ConditionalOnMissingBean
        public Jump jump(JumpProperties jumpProperties) {
    
            Jump jump = new Jump();
            jump.setAge(jumpProperties.getAge());
            jump.setName(jumpProperties.getName());
            return jump;
        }
    
    }
    

    Properties 작성

    -> @ConfigurationProperties 를 추가하고, application.properties에서 사용할 prefix를 괄호 안에 기입한다.

    @ConfigurationProperties("jump")
    public class JumpProperties {
    
        private String name;
        private int age;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
        @Override
        public String toString() {
            return "Jump{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    

     

    spring.factories 파일 생성

    main - resources에 META-INF 디렉토리를 만들고, 그 안에 spring.factories 파일을 만들어준다.

    아래와 같이 하면 패키지이름.Configuration파일명을 자동으로 불러온다. (EnableAutoConfiguration이 켜져있을 경우)

    아래와 같이 maven 빌드를 하면, local maven storage에 jar파일이 생성, 설치됩니다.

     

    다른 프로젝트에서 Bean 사용하는 방법

    -> 아래 <artifactId></artifactId> 가 있는 3줄을 복사하여 다른 프로젝트 dependecy에 추가합니다.

    Maven build 후 External Libraries 를 보면 정상적으로 Maven library 설치가 된 것을 알 수 있을 것이다.

    아래 프로젝트 테스트를 할 수 있는 Runner Class를 작성합니다.

     

    Properties 값을 가져오도록 하기 위해서 아래와 같이 resources-> application.properties 에 key, value를 작성합니다.

    위 console은 실행 결과입니다.

     

     

Designed by Tistory.