使用Spring怎么动态注册bean-创新互联

这篇文章将为大家详细讲解有关使用Spring怎么动态注册bean,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

专注于为中小企业提供做网站、成都网站设计服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业盐山免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了1000多家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

I. 主动注册Bean支持

借助BeanDefinition来实现bean的定义,从最终的使用来看,代码比较少,几行而已

public  T registerBean(String name, Class clazz, Object... args) {
   BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz);
   if (args.length > 0) {
     for (Object arg : args) {
       beanDefinitionBuilder.addConstructorArgValue(arg);
     }
   }
   BeanDefinition beanDefinition = beanDefinitionBuilder.getRawBeanDefinition();
 
   BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) applicationContext.getBeanFactory();
   beanFactory.registerBeanDefinition(name, beanDefinition);
   return applicationContext.getBean(name, clazz);
}

测试如下

import com.github.hui.story.quickstory.server.VisitService;
import lombok.ToString;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.stereotype.Component;

@Component
public class BeanHolder {
  private final ConfigurableApplicationContext applicationContext;

  public BeanHolder(ConfigurableApplicationContext applicationContext) {
    this.applicationContext = applicationContext;
    initSer();
  }

  public void initSer() {
    InrSer ser = registerBean("test", InrSer.class);
    ser.name = "一灰";
    ser.uid = 22;
    System.out.println(ser);

    InrSer ser2 = registerBean("test2", InrSer.class, "一灰灰Blog", 20);
    System.out.println(ser2);
  }

  @ToString
  public static class InrSer {
    private String name;
    private Integer uid;

    @Autowired
    private VisitService visitService;

    public InrSer() {
    }

    public InrSer(String name, Integer uid) {
      this.name = name;
      this.uid = uid;
    }
  }

  private  T registerBean(String name, Class clazz, Object... args) {
    BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz);
    if (args.length > 0) {
      for (Object arg : args) {
        beanDefinitionBuilder.addConstructorArgValue(arg);
      }
    }
    BeanDefinition beanDefinition = beanDefinitionBuilder.getRawBeanDefinition();

    BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) applicationContext.getBeanFactory();
    beanFactory.registerBeanDefinition(name, beanDefinition);
    return applicationContext.getBean(name, clazz);
  }
}

输出如下

使用Spring怎么动态注册bean

关于使用Spring怎么动态注册bean就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


当前名称:使用Spring怎么动态注册bean-创新互联
文章URL:http://myzitong.com/article/dgooes.html