Open ddackkeun opened 1 year ago
스프링 빈(Bean)
스프링에서 제어권을 가지고 관리되는 객체로 스프링 프레임워크로부터 생성 및 의존관계를 부여받음
BeanFactory
ApplicationContext
ListableBeanFactory
, HierachicalBeanFactory
를 ApplicationContext가 확장부가기능
제공
MessageSource
, EnviromentCapable
, ApplicationEventPublisher
, ResourceLoader
상속받음💡 엔터프라이즈 개발을 위해서는 빈의 생성, 관리 이외의 부가 기능이 필요한데, ApplicationContext 에서 부가적인 기능을 제공함 💡 BeanFactory 를 개별적으로 사용하는 일은 거의 없으며 특별한 이유 없으면 ApplicationContext 사용 권장
정리
ApplicationContext 구조
public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
...
}
BeanFactory를 확장한 ListableBeanFactory, HierarchicalBeanFactory 그리고 EnvironmentCapable, MessageSource, ApplicationEventPublisher, ResourcePatternResolver 를 상속받음
프로파일 활성화 및 설정
profile value 설정하여 빈을 등록하면 profile value로 빈들이 묶이게 되고, 활성화할 프로파일을 Environment 에서 선택하면 해당 프로파일을 가진 빈 묶음을 가져올 수 있음
@Profile 어노테이션 이용한 Bean 등록
@Configuration
@Profile("test")
public class TestConfiguration {
@Bean
public BookRepository bookRepository() {
return new TestBookRepository();
}
}
ConfigurableApplicationContext 등 ApplicationContext 에서 얻은 Environment 이용해 환경 설정
@Component
public class ProfileTestRunner implements ApplicationRunner {
@Autowired
ConfigurableApplicationContext ctx;
@Override
public void run(ApplicationArguments args) throws Exception {
ConfigurableEnvironment environment = ctx.getEnvironment();
environment.setActiveProfiles("dev");
System.out.println(Arrays.toString(environment.getActiveProfiles()));
}
@ActiveProfiles 어노테이션 이용한 프로파일 활성화
@SpringBootTest
@ActiveProfiles("test")
class TestConfigurationTest { ... }
프로퍼티 소스 설정 및 프로퍼티 값을 가져옴
애플리케이션에 등록된 key-value 쌍의 프로퍼티들을 접근할 수 있도록 도움
getProperty() 메소드를 통해 프로퍼티 가져올 수 있음
Environment environment = ctx.getEnvironment();
environment.getProperty();
프로퍼티의 종류는 구성파일(application.properties) 또는 운영체제나 JVM에서 넘겨 받는 프로퍼티 등
-Dspring.profiles.active="test"
국제화 및 메시지 처리를 위한 인터페이스
MessageSource
는 ****각 지역에 대한 다국어 지원을 위해 메시지설정 파일(번들)을 모아서 각 국가마다 로컬라이징(로드)함으로써 각 지역에 맞춤 메시지를 제공스프링에서 이벤트 프로그래밍에 필요한 인터페이스 제공
자원(파일, 클래스 경로 등)을 로드하고 읽는 메서드를 제공
문제
해당 섹션에서 스프링 컨테이너의 종류인 BeanFactory 와 ApplicationContext 을 설명하며 BeanFactory를 확장하여 만든 ApplicationContext 가 가진 부가기능에 대해 간단하게 설명하였다. 따라서 강의에서 설명하지 않았던 ApplicationFactory의 부가기능에 대해서 알아보려고 한다.
관련 섹션