2025. 3. 6. 21:04ㆍSpring Framework/Spring IoC
DefaultListableBeanFactory의 확장성과 BeanPostProcessor/BeanFactoryPostProcessor의 관계를 설명해 드리겠습니다.
📌 1️⃣ DefaultListableBeanFactory의 확장성이란?
✔ DefaultListableBeanFactory
는 스프링의 핵심 Bean Factory로, 빈을 생성, 관리, 검색, 조작할 수 있는 다양한 기능을 제공합니다.
✔ 확장성이 뛰어나다는 의미는 단순히 정적인 빈 관리가 아니라, 실행 중 동적으로 빈을 조작할 수 있는 다양한 확장 포인트를 제공한다는 뜻입니다.
✔ 대표적인 확장 포인트가 바로 BeanPostProcessor
와 BeanFactoryPostProcessor
입니다.
📌 즉, DefaultListableBeanFactory의 확장성을 논할 때 BeanPostProcessor 및 BeanFactoryPostProcessor를 함께 설명하는 이유는
➡ DefaultListableBeanFactory 내부에서 이들을 활용하여 빈의 생성 및 설정을 동적으로 변경할 수 있도록 지원하기 때문입니다.
📌 2️⃣ BeanPostProcessor와 BeanFactoryPostProcessor는 확장 포인트다
✔ BeanPostProcessor
와 BeanFactoryPostProcessor
는 스프링 컨테이너가 빈을 생성하고 관리하는 과정에서 개입할 수 있도록 지원하는 확장 포인트입니다.
✔ DefaultListableBeanFactory
는 이를 자동으로 인식하고 빈의 라이프사이클에 추가적인 동작을 적용할 수 있도록 합니다.
📌 즉, DefaultListableBeanFactory는 이 확장 포인트를 활용하여, 개발자가 빈을 더 유연하게 조작할 수 있도록 해줍니다.
➡ 스프링이 내부적으로 트랜잭션, AOP, @Autowired 주입 등의 기능을 제공할 수 있는 이유도 이 확장 포인트 덕분입니다.
📌 3️⃣ DefaultListableBeanFactory와 BeanPostProcessor / BeanFactoryPostProcessor의 관계
✔ DefaultListableBeanFactory 내부에서의 BeanPostProcessor
DefaultListableBeanFactory
는 빈이 초기화될 때 자동으로BeanPostProcessor
들을 실행합니다.- 즉,
DefaultListableBeanFactory
가 빈을 생성하고 나면,BeanPostProcessor
가 빈을 가로채서 후처리를 수행합니다.
📌 예제: BeanPostProcessor를 자동으로 인식하여 실행
@Component
public class CustomBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) {
System.out.println("🚀 빈 초기화 전 (Before Init): " + beanName);
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) {
System.out.println("✅ 빈 초기화 후 (After Init): " + beanName);
return bean;
}
}
✔ DefaultListableBeanFactory
는 BeanPostProcessor를 자동으로 감지하고 빈의 초기화 과정에서 실행합니다.
✔ 즉, 개별 빈의 초기화 로직을 동적으로 변경할 수 있도록 하는 확장 기능을 제공하는 것입니다.
✔ DefaultListableBeanFactory 내부에서의 BeanFactoryPostProcessor
DefaultListableBeanFactory
는 빈을 생성하기 전에BeanFactoryPostProcessor
를 실행하여 빈 정의(BeanDefinition)를 수정할 수 있도록 허용합니다.- 즉, 빈 인스턴스를 만들기 전에
BeanDefinition
을 조작할 수 있습니다.
📌 예제: BeanFactoryPostProcessor를 통해 BeanDefinition 수정
@Component
public class CustomBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
System.out.println("🛠 BeanFactoryPostProcessor 실행 중...");
// 특정 빈의 BeanDefinition 수정
BeanDefinition beanDefinition = beanFactory.getBeanDefinition("myService");
beanDefinition.setScope(BeanDefinition.SCOPE_PROTOTYPE); // 싱글톤 → 프로토타입 변경
}
}
✔ DefaultListableBeanFactory
는 BeanFactoryPostProcessor를 실행하여 빈 생성 전에 빈 정의를 수정할 수 있도록 허용합니다.
✔ 즉, 개별 빈이 아닌 빈 팩토리 자체를 확장할 수 있도록 하는 기능을 제공하는 것입니다.
📌 4️⃣ 결론 (DefaultListableBeanFactory의 확장성과 BeanPostProcessor / BeanFactoryPostProcessor 관계 정리)
개념 | 설명 | DefaultListableBeanFactory와의 관계 |
---|---|---|
DefaultListableBeanFactory | 스프링 컨테이너의 핵심 빈 팩토리 | 다양한 확장 포인트를 제공하여 동적 빈 조작 가능 |
BeanPostProcessor | 빈 초기화 전후 후처리 수행 | DefaultListableBeanFactory가 자동 감지하여 빈 초기화 시 실행 |
BeanFactoryPostProcessor | 빈 정의(BeanDefinition) 수정 | DefaultListableBeanFactory가 빈 생성 전 실행하여 빈 정의 조작 가능 |
➡ 즉, DefaultListableBeanFactory의 확장성을 논할 때, BeanPostProcessor와 BeanFactoryPostProcessor를 함께 설명하는 이유는
👉 DefaultListableBeanFactory가 이 확장 포인트를 활용하여 빈의 생성 및 설정을 동적으로 변경할 수 있도록 지원하기 때문입니다.
📌 결론:
✔ DefaultListableBeanFactory
는 빈을 정적인 객체로 관리하는 것이 아니라, 동적으로 수정 및 조작할 수 있도록 하는 강력한 확장성을 제공
✔ BeanPostProcessor
는 개별 빈의 초기화 과정에서 개입할 수 있는 확장 포인트
✔ BeanFactoryPostProcessor
는 빈이 생성되기 전에 BeanDefinition을 수정할 수 있는 확장 포인트
✔ 이 둘을 활용하면 스프링 컨테이너 내부의 동작을 커스텀할 수 있으며, 스프링이 제공하는 다양한 기능(AOP, 트랜잭션, @Autowired 등)도 이를 활용하여 동작
🚀 즉, DefaultListableBeanFactory가 확장성이 뛰어나다는 것은, 단순히 빈을 관리하는 것이 아니라, 빈의 정의를 동적으로 수정하고 후처리를 할 수 있도록 지원하는 여러 확장 포인트를 제공하기 때문입니다!
'Spring Framework > Spring IoC' 카테고리의 다른 글
BeanPostProcessor / BeanFactoryPostProcessor (0) | 2025.03.06 |
---|---|
@Order (0) | 2025.01.26 |
엔터프라이즈 관련 기능 (1) | 2025.01.16 |
Service Locator Pattern (1) | 2025.01.16 |
Spring IoC (0) | 2024.11.15 |