빈(Bean)은 스프링 컨테이너에 의해 관리되는 재사용 가능한 소프트웨어 컴포넌트
@Configuration
public class AppConfig{
@Bean
public MyBean myBean() {
return new MyBean();
}
}
@Component , @Service , @Repository , @Controller 등을 통해 Spring이 자동으로 해당 클래스를 Bean으로 등록초기화 전 처리 → 초기화 → 초기화 후 처리 → 사용 가능@PostConstruct 와 소멸 전 콜백인 @PreDestroy 가 있음@PostConstruct 는 Spring 에서 빈(Bean)의 초기화 작업을 수행할 때 사용하는 애노테이션API_KEY 를 DB 호출이나 외부 URL을 통해 얻어야 하는 경@Component
public class ExternalApiConnector{
private final ApiClient apiClient;
private String API_KEY;
public ExternalApiConnector(ApiClient apiClient){
this.apiClient = apiClient;
}
@PostConstruct
public void initializeConnection(){
this.API_KEY = apiClient.getApiKey();
}
public void callExternalService(){
apiClient.callService(API_KEY);
}
}
@PreDestroy 는 Spring에서 빈(Bean)이 소멸되기 직전에 호출되는 메서드를 지정하는 애노테이션@PreDestroy 는 @PostConstruct 와 반대로, 빈이 컨테이너에서 제거되기 전에 마지막으로 실행되어야 하는 작업을 정의@Componet
public class CacheService{
private Map<String, String> cache = new HashMap<>();
pubilc void putInCache(String key, String value) {
cache.put(key, value);
}
public String getFromCache(String key){
return cache.get(key);
}
@PreDestroy
public void saveCacheTodatabase(){
// 캐시 데이터를 데이터베이스에 저장하는 로직
System.out.println("Saving cache data to database...");
// 실제 데이터베이스 저장 로직
}
}
@PostConstruct , @PreDestroy생성자, 필드, setter 주입 등 이 단계에서 이루어짐@PostContruct 애노테이션이 붙은 메서드가 자동으로 호출@PreDestroy 애노테이션이 붙은 메서드가 자동으로 호출@Componet
public class MyService{
@PostConstruct
public void init(){
// 이 메서드는 빈이 생성되고 모든 의존성이 주입된 후 자동으로 호출
System.out.println("MyService bean is fully initialized");
}
}
@Component
pubilc class MyService{
public void cleanup(){
// 이 메서드는 빈이 소멸되기 직전에 자동으로 호출
System.out.println("MyService bean is about to be destoryed");
}
}
@PostConstruct@PreDestroy@PostConstruct 메서드는 모든 의존성 주입이 완료된 후에 호출됨@PostConstruct 와 @PreDestroy 와 같은 애노테이션은 Spring에서 빈의 생명주기 중 특정 시점에서 자동으로 호출됨