@PreDestroy란 무엇이며 언제 사용될까?@PreDestroy 어노테이션을 함수에 적용하면 해당 Bean이 소멸되기 직전에 메서드가 자동으로 호출되며, 주로 다음과 같은 작업에 사용된다. 1. 리소스 해제: 열려있는 파일이나 네트워크 연결 닫기2. 캐시 정리: 메모리에 저장된 임시 데이터 삭제3. 백그라운드 작업 종료: 실행 중인 스레드나 작업 중지 @PreDestroy 사용해보기@PreDestroy를 사용하는 방법은 간단하다. 단순히 Bean이 파괴되기 전 실행할 함수 위에 @PreDestroy를 붙인 후 내부에 실행할 코드를 작성하면 된다. 예를 들어 이전 글에서 다룬 SearchInMemoryCache에서 Bean이 파괴되기 전체 캐시를 지워야 한다고 해보자. 그런 경우 다음과 같이 clean..
코틀린
ObjectProvider가 필요한 이유앞서 우리는 다음과 같이 ShoppingCart를 프로토 타입 Bean으로 만들고, 이를 싱글톤으로 선언된 CartController에서 사용하고자 했다. @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)@Componentclass ShoppingCart { private val items: MutableList = mutableListOf() fun addItem(item: String) { items.add(item) } fun removeItem(item: String) { items.remove(item) }}@Component@Scope(ConfigurableBeanFa..
@Scope 어노테이션이 필요한 이유우리가 Bean을 만들 때 기본적으로 싱글톤으로 만들어진다. 즉, 한 번 생성되면 해당 Bean이 필요한 곳 모두에서 재사용된다. 만약 순수 함수로만 구성된 Bean이거나 애플리케이션 실행 도중 하나의 공통된 상태만 유지하면 되는 객체라면 이렇게 싱글톤으로 생성한 후 모든 곳에서 재사용하면 된다.하지만, 종종 상태를 가지면서 이 상태가 사용되는 곳마다 다르게 관리돼야 하는 Bean이 있다. 예를 들어 사용자를 위한 장바구니 객체를 만들었는데 사용자마다 다른 장바구니가 만들어져야 하는 경우가 있을 수 있다. 이런 경우에는 Bean이 필요할 때마다 새로운 인스턴스가 생성돼야 한다.Spring은 이러한 상황들을 위해 Bean이 생성되는 방식을 제공하는 @Scope 어노테이션..
지연 초기화가 필요한 이유@Component 어노테이션이나 @Bean 어노테이션을 통해 IOC Container에 Bean을 등록하면 스프링 애플리케이션 시작 시 등록된다. 예를 들어 다음과 같이 초기화 시 InitTestUseCase Initialized 를 출력하는 InitTestUseCase를 만들어보자.@Componentclass InitTestUseCase { init { println("InitTestUseCase initialized") }} 그런 다음 Configuration 파일을 다음과 같이 만든 후@ComponentScan@Configurationclass InitConfiguration 다음과 같이 컨테이너를 초기화 하고, "After container ini..
@ComponentScan의 기본 동작클래스에 @Configuration 어노테이션과 함께 @ComponentScan 어노테이션이 붙어 있으면, 해당 Configuration 은 해당 패키지 하위의 모든 클래스를 스캔해 @Component 어노테이션이 붙은 객체들을 모두 Bean으로 만든다. 예를 들어 다음과 같은 패키지 구조와 파일들이 있다고 해보자. section8 패키지는 다음 경로에 있다: com.kotlinworld.spring.di.section8 이곳에서 ScanConfiguration파일은 @Configuration 어노테이션과 @ComponentScan 어노테이션이 붙은 클래스이고@ComponentScan@Configurationclass ScanConfiguration ScanReq..