일단 어떻게 수정을 하였는지 살펴보자
먼저 DispatcherServletConfig와 TomcatWebServerConfig에 @Configuration 어노테이션을 @MyAutoConfiguration annotation으로 수정해주자.
package com.example.config.autoconfig;
import com.example.config.MyAutoConfiguration;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
@MyAutoConfiguration
public class TomcatWebServerConfig {
@Bean
public ServletWebServerFactory servletWebServerFactory() {
return new TomcatServletWebServerFactory();
}
}
package com.example.config.autoconfig;
import com.example.config.MyAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.DispatcherServlet;
@MyAutoConfiguration
public class DispatcherServletConfig {
@Bean
public DispatcherServlet dispatcherServlet() {
return new DispatcherServlet();
}
}
MyAutoConfiguration을 살펴보자.
package com.example.config;
import org.springframework.context.annotation.Configuration;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Configuration(proxyBeanMethods = false)
public @interface MyAutoConfiguration {
}
차이점은 기존 우리가 사용했던 것처럼 Configuration annotation 적용이 되는 것이 아니라
proxyBeanMethods가 false로 적용되도록 하였다.
뭐가 달라졌을까?
true면 뭐가 어떤식으로 동작하는 것일까?
Configuration annotation이 붙은 클래스의 독특한 특징에 대해서 알아볼 필요가 있다.
Configuration annotation은 유저 구성정보를 작성하는 중에도 사용할 일이 분명히 있다.
우리가 모든 어플리케이션 인프라스트럭처 빈을 스프링 부트가 자동구성으로 알아서 등록해주는 것만 사용한다면 상관이 없지만
우리가 직접 이 컨피규레이션 클래스를 애플리케이션 코드안에다가 추가를 하고 원하는 빈을 등록하는 작업을 해야되는 경우가 있다.
그래서 이 컨피규레이션 어노테이션의 동작 방식에 대해서는 정확하게 이해할 필요가 있다.
지금까지 작업한 구조를 살펴보고 넘어가보자
'강의 > 토비의 스프링부트' 카테고리의 다른 글
@Configuration과 proxyBeanMethods (0) | 2023.02.23 |
---|---|
동적인 자동 구성 정보 등록 (0) | 2023.02.23 |
자동 구성 기반 애플리케이션 (meta annotation, composed annotation) (0) | 2023.02.23 |
ㅇㄹㄴㅇ (0) | 2023.02.22 |
테스트 코드 (0) | 2023.02.22 |