-
[스프링 부트 개념과 활용] 자동 설정 @EnableAutoConfigurationSPRING/스프링부트 개념과 활용 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은 실행 결과입니다.
'SPRING > 스프링부트 개념과 활용' 카테고리의 다른 글
[스프링 부트 개념과 활용] 스프링부트 로그 설정 (0) 2020.12.26 [스프링 부트 개념과 활용] 프로파일 관련 정리 (0) 2020.12.25 [스프링 부트 개념과 활용] 외부설정 - @ConfigurationProperties (0) 2020.12.25 [스프링 부트 개념과 활용] 외부설정 - Application.properties (0) 2020.12.24 [스프링 부트 개념과 활용] SpringApplication 관련 정리 (0) 2020.12.20