ImportBeanDefinitionRegistrar 接口

动态创建Bean的方式

  • 实现接口
  • 导入
  • 获取

实现接口

import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;

/**
 * registerBeanDefinitions 方法中的参数 BeanDefinitionRegistry 可以往Spring IOC Container 中动态地装配Bean
 */
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {

    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {

        //手动注入 Forwards 类的实例
        BeanDefinitionBuilder beanDef_forwards = BeanDefinitionBuilder.rootBeanDefinition(Forwards.class);
        registry.registerBeanDefinition("forwards", beanDef_forwards.getBeanDefinition());

        //手动注入 Security类的实例
        BeanDefinitionBuilder beanDef_security = BeanDefinitionBuilder.rootBeanDefinition(Security.class);
        registry.registerBeanDefinition("security", beanDef_security.getBeanDefinition());
    }
}

导入实现 & 测试

@Import(MyImportBeanDefinitionRegistrar.class)
@Configuration
public class App {

    public static void main(String[] args) throws Exception {
        ConfigurableApplicationContext context = SpringApplication.run(App.class, args);

        //实现ImportBeanDefinitionRegistrar 实现Bean的注入
        System.out.println(context.getBean(MyImportBeanDefinitionRegistrar.class));
        System.out.println(context.getBean(Forwards.class));
        System.out.println(context.getBean(Security.class));
    }
}

results matching ""

    No results matching ""