Spring에서 빈 교체
BeanFactoryPostProcessor
를 사용하여 애플리케이션 시작 중에 빈 정의를 대체하여 이를 달성할 수 있습니다.다음은 외부 패키지의 서비스입니다.
@Service
public class Ant implements Animal{
private String animalName;
public Ant() {
this.animalName = "ant from original registration";
}
@Override
public void setAnimalName(String animalName) {
this.animalName = animalName;
}
@Override
public String getAnimalName() {
return animalName;
}
}
이를 대체하기 위해
AntBeanFactoryPostProcessor
를 구현하는 BeanFactoryPostProcessor
를 생성합니다. 먼저 원래 bean 정의를 제거하고 새 정의로 등록합니다.@Configuration
public class MyBeanConfig {
@Bean
public AntBeanFactoryPostProcessor antBeanFactoryPostProcessor() {
return new AntBeanFactoryPostProcessor();
}
}
public class AntBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
// remove original bean definition
((DefaultListableBeanFactory) configurableListableBeanFactory).removeBeanDefinition("ant");
GenericBeanDefinition genericBeanDefinition = new GenericBeanDefinition();
genericBeanDefinition.setBeanClass(Ant.class);
genericBeanDefinition.getPropertyValues().add("animalName", "ant from BeanFactoryPostProcessor");
((DefaultListableBeanFactory) configurableListableBeanFactory)
.registerBeanDefinition("ant", genericBeanDefinition);
}
}
그런 다음 교체가 유효한지 확인할 수 있습니다.
@SpringBootApplication
public class DependencyInjectionApplication {
public static void main(String[] args) {
ApplicationContext applicationContext = SpringApplication.run(DependencyInjectionApplication.class, args);
System.out.println("\n----- BeanFactoryPostProcessor register bean: ant");
Ant ant = applicationContext.getBean("ant", Ant.class);
System.out.println(ant.getAnimalName());
}
}
우리는 다음과 같은 결과를 얻을 것입니다:
here에서
BeanFactoryPostProcessor
에 대한 세부 정보를 볼 수 있습니다.
Reference
이 문제에 관하여(Spring에서 빈 교체), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aldora/replace-a-bean-in-spring-3i53텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)