Spring 實現動態註冊Bean
阿新 • • 發佈:2019-01-03
寫一個元件,需要依據配置選擇DAO實現,比如JPA,Mybatis
預期效果為,系統啟動時根據配置自動向spring註冊相關的元件(比如JPA相關元件)
通常向spring註冊元件都是使用xml、@Bean註解或者@Component方式實現,這些方式都是靜態的,不能通過程式來選擇是否註冊。
spring當然也提供了註冊元件的擴充套件,就是 BeanDefinitionRegistryPostProcessor,
實現了BeanDefinitionRegistryPostProcessor的類可以獲得BeanDefinitionRegistry 物件,通過它可以動態的註冊元件。
@Component
public class RegistryDemo implements BeanDefinitionRegistryPostProcessor {
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException {
GenericBeanDefinition definition = new GenericBeanDefinition();
definition.setBeanClass(Demo.class); //設定類
definition.setScope("singleton"); //設定scope
definition.setLazyInit(false); //設定是否懶載入
definition.setAutowireCandidate(true); //設定是否可以被其他物件自動注入
beanDefinitionRegistry.registerBeanDefinition("demo", definition);
}
//省略其他程式碼
}