通常我们是使用@Component等注解某个类让其被Spring IoC容器扫描,或者使用@EnableXXX(@Import)注解来导入,或者在META-INF/spring.factories中指定配置类(key是org.springframework.boot.autoconfigure.EnableAutoConfiguration)。
但是,某些情况下,我们需要更加灵活的创建Bean,此时可以使用如下的形式:
public void register() {
ApplicationContext context = getApplicationContext();
DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory) context.getAutowireCapableBeanfactory();
beanFactory.registerSingleton(beanName, obj);
}
这样,就可以将一个名称为beanName的obj对象添加到Spring的容器中。
如果有地方需要注入这个对象,那么可能需要指定@Lazy,否则会找不到Bean对象而报错。