@ConfigurationProperties 가 필요한 경우application.properties 파일에는 애플리케이션을 위한 여러 설정이 들어간다. 이때 여러 설정 값들을 application.properties에 정의해 놓는데, 이 값들을 앱으로 가져와야 하는 경우가 생긴다. 예를 들어 서버의 이름, 서버에서 허용하는 클라이언트의 유형 등을 개발 환경 별로 다르게 설정해놓고 이 값을 통해 애플리케이션을 설정하는 경우 등이 있을 수 있다. 예를 들어 다음과 같은 application.properties 파일이 있다고 해보자.spring.application.name=setting-configurationpropertiesserver.server-name=releaseserver.allowed-clie..
bean
@PostContruct 란 무엇인가?@PostConstruct는 함수에 붙는 어노테이션으로, 해당 어노테이션이 붙은 함수는 Bean이 만들어질 때 한 번 실행된다. Bean이 초기화된 이후에 데이터를 로딩해야 한다거나, 로깅을 해야 하는 경우 @PostContruct 어노테이션을 사용할 수 있다. @PostContruct 사용해보기예를 들어 검색 결과를 메모리에 저장해놓는 SearchInMemoryCache 클래스가 있다고 해보자. 이 클래스의 경우 초기화가 된 후 Bean으로 등록되자마자 초기 결과가 있어야 한다고 해보자. 이런 경우 다음과 같이 @PostContruct 어노테이션을 setUp 함수 위에 붙여서 초기 데이터를 세팅할 수 있다.@Componentclass SearchInMemoryCac..
@ComponentScan의 기본 동작클래스에 @Configuration 어노테이션과 함께 @ComponentScan 어노테이션이 붙어 있으면, 해당 Configuration 은 해당 패키지 하위의 모든 클래스를 스캔해 @Component 어노테이션이 붙은 객체들을 모두 Bean으로 만든다. 예를 들어 다음과 같은 패키지 구조와 파일들이 있다고 해보자. section8 패키지는 다음 경로에 있다: com.kotlinworld.spring.di.section8 이곳에서 ScanConfiguration파일은 @Configuration 어노테이션과 @ComponentScan 어노테이션이 붙은 클래스이고@ComponentScan@Configurationclass ScanConfiguration ScanReq..
클래스 초기화 시 의존성을 주입하는 것이 필요한 이유이전 시간까지 우리는 String 타입이나 Int 같은 간단한 타입의 Bean만 만들었다. 하지만, 실제 애플리케이션을 만들 때는 클래스들이 다른 클래스에 의존하기 때문에 주입을 받아야 하는 상황이 많이 발생한다. 즉, 초기화를 위해 의존성을 주입 받아야 하는 상황이 많이 발생한다. 예를 들어 다음과 같은 UserCreator 클래스가 있다고 해보자.class UserCreator(private val repository: UserRepository) { fun createUserWithRandomId(user: String) { val id = UUID.randomUUID().toString() repository.cr..
IOC Container에 등록된 모든 Bean의 이름 가져와 출력하기IOC Container에 등록된 모든 Bean의 이름을 가져오기 위해서는 AnnotationConfigApplicationContext의 beanDefinitionNames 프로퍼티를 사용하면 된다. 이를 사용하는 방법을 알아보기 위해 먼저 Configuration 파일을 다음과 같이 만들어 Bean이 blogName과 blogAge 두개 등록될 수 있도록 해보자.@Configurationclass DefaultContainerConfiguration { @Bean fun blogName(): String { return "KotlinWorld" } @Bean fun blogAge(): Int ..