[스프링 부트 개념과 활용] 자동 설정 @EnableAutoConfiguration
메인 클래스에 붙어 있는 @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은 실행 결과입니다.