Spring/boot

[Spring-boot] 자동설정 1부

jay Joon 2021. 1. 12. 21:38

spring-boot-study

[ Inflearn ] 스프링 부트 개념과 활용 강의를 듣고 챕터별 간단하게 정리합니다.

내용적 오류가 존재 할 수 있으며 부족한 부분은 언제든지 지적해주시면 감사드립니다.


  1. 이 챕터에서 하고자하는 것

    1-1. spring-boot 가 실행될때 AutoConfigure를 이용하여 외부 프로젝트에서 설정한 Bean을 자동으로 주입받아 사용하는 것이 주된 목표이다.

  1. 시작

    2-1. Starter 와 AutoConfigure 의 네이밍 패턴은 다음과 같다.

    Naming patterns 의미
    Xxx-spring-boot-autoconfigure 자동 설정
    Xxx-spring-boot-starter 필요한 의존성 정의

그냥 하나로 만들고 싶을 때는 Xxx-spring-boot-starter Naming pattern 을 따르면 된다.

image

해당 프로젝트에 다음과 같은 의존성을 추가한다.

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

이제 Bean으로 등록할 class를 하나 만들어보자.

public class JaeJoon {

    private String name;
    private Integer age;

   //Gatter , Setter , 생성자 , 생략 

 }

이 Class 를 Bean으로 등록하기 위해 자바설정 파일을 생성해야 한다.

@Configuration
public class JaeJoonConfig {

    @Bean
    JaeJoon jaeJoon(){
        return new JaeJoon("김재준",26);
    }
}

이제 부터 핵심인 @EnableAutoConfiguration 이 해당 프로젝트 자동 설정을 찾을 수 있도록 셋팅을 해보자.

java -> resource 디렉토리 -> META-INF-> spring.factories 생성

image

  • spring.factories
    • key : org.springframework.boot.autoconfigure.EnableAutoConfiguration
    • value: FQCN(Fully Qualified Class Name)

image

위 같은 셋팅을 다 끝낸 후 mvn intall 실행하여 빌드하면 된다.

image

빌드가 다 끝났다면 다시 원래의 spring-boot 프로젝트의 pom.xml 에 내가 빌드한 프로젝트를 주입하면 끝난다.

<dependency>
    <groupId>org.example</groupId>
    <artifactId>jaejoon-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

이제 사용해보자 !

@Component
public class ApplicationRunner implements org.springframework.boot.ApplicationRunner {

    @Autowired
    JaeJoon jaeJoon;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println(jaeJoon.getName());
        System.out.println(jaeJoon.getAge());
    }
}

해당 Spring-boot 프로젝트에선 JaeJoon을 bean으로 등록한 적 없지만 주입 받아서 사용 할 수 있다. 결과는 다음과 같다.

image