1. 程式人生 > >Spring 實現動態註冊Bean

Spring 實現動態註冊Bean

寫一個元件,需要依據配置選擇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); } //省略其他程式碼 }