Spring boot创建bean并注入到spring 中

xiaoxiao2021-02-27  154

本文转自http://412887952-qq-com.iteye.com/blog/2301642

平时开发时,可能遇到自定义的一个bean需要注入spring 中进行管理,spring boot提供了一个接口,改接口就是BeanDefinitionRegistryPostProcessor,提供了进行注册bean的方法;详细使用如下:

定义一个需要注入到spring 中的bean:

public class ShanhyA{ public void display() { System.out.println("dispalyA"); } }

bean注入到spring核心:定义BeanDefinitionRegistryPostProcessor接口实现类:

/**  * 实例化bean并注册到spring中进行管理  * @author 红薯  *  */ @Configuration public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor{ //bean的名称生成器 private BeanNameGenerator beanNameGenerator =new AnnotationBeanNameGenerator(); /** * 先执行postProcessBeanDefinitionRegistry方法 * 在执行postProcessBeanFactory方法 */ @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory arg0) throws BeansException { System.out.println("postProcessBeanFactory"); } @Override public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { //进行注入bean registerBean(registry, "ShanyA", ShanhyA.class); registerBean(registry, "SharyB", ShanHyB.class); System.out.println("postProcessBeanDefinitionRegistry"); } /** * 公共注册的方法 * @param registry * @param name * @param beanClass */ private void registerBean(BeanDefinitionRegistry registry,String name,Class<?> beanClass){       AnnotatedBeanDefinition annotatedBeanDefinition  = new AnnotatedGenericBeanDefinition(beanClass);         //可以自动生成name       String beanName = (name != null?name:this.beanNameGenerator.generateBeanName(annotatedBeanDefinition, registry));       //bean注册的holer类.       BeanDefinitionHolder beanDefinitionHolder = new BeanDefinitionHolder(annotatedBeanDefinition, beanName);       //使用bean注册工具类进行注册.       BeanDefinitionReaderUtils.registerBeanDefinition(beanDefinitionHolder, registry);    } }

测试类:

使用@Resource 或者 @Autowired并指定@Qualifier 也可以进行bean的注入

@RestController public class TestController { @Resource(name="ShanyA") private ShanhyA shanhyA; //或者是下面

@Autowired @Qualifier("ShanyA") private ShanHyB shanHyB; @RequestMapping("test") @ResponseBody public int testchange(){ shanhyA.display(); shanHyB.display(); return 1; }

}

注意:不管是@Resource(name="xxx")或者是@Autowrid@Qualifier("XXX"),xxx所指向的是核心类进行注入bean的name名称,否则是找不到注入的bean的

转载请注明原文地址: https://www.6miu.com/read-14192.html

最新回复(0)