getBeanFactory:它是AbstractApplicationContext自己定义的抽象方法,实现类为AbstractRefreshableApplicationContext.class, public final ConfigurableListableBeanFactory getBeanFactory() { synchronized(this.beanFactoryMonitor) {
总结:当你封装一个SpringUtils工具类时,获取bean对象的方法时,最好使用BeanFactoryPostProcessor接口里的ConfigurableListableBeanFactory对象,这样可以避免NPE(NullPointerException)的问题。 使用场景和功能 ConfigurableListableBeanFactory和ApplicationContext都是 Spring 容器的接口,它们有各自的使用场景和功能: ConfigurableList...
一般情况下,我们Controller会使用@Autowired注入Service,而Service会默认注入Mapper,此时就会 MapperFactoryBean#getObject返回Mapper的代理类:MapperProxy.class。 MapperProxy.class里有invoke方法,使用时会走这个方法。 流程 refresh() //AbstractApplicationContext finishBeanFactoryInitialization(beanFactory); //AbstractApplicat...
方法1: 在初始化时保存ApplicationContext对象,可再分为如下三种 1.1 XmlBeanFactory 引用资源 Resource resource = new ClassPathResource("appcontext.xml"); BeanFactory factory = new XmlBeanFactory(resource); 1.2 二:ClassPathXmlApplicationContext 编译路径 ApplicationContext factory=new ClassPathXmlApplicationCont...
5、跟着PostProcessorRegistrationDelegate#invokeBeanFactoryPostProcessors()方法进去后,会发现里面真的是别有洞天,很容易迷路(牢牢带着自己的问题分析源码找答案,不要被除自己问题以外的东西迷了眼,一定会柳暗花明),另外org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor的实现类的调用也在这...
beanFactory.registerBeanDefinition(name, beanDefinition); return applicationContext.getBean(name, clazz); } } 上面唯一的方法中,接收四个参数,源码中也有说明,稍微需要注意下的是Spring容器中不允许出现同名的Bean 2. 测试用例 动态创建Bean,并不是塞入容器之中就完结了,塞进去之后,是为了后续的使用,自然而然的...
beanFactory = (ConfigurableListableBeanFactory) beanFactory; // 通过主动调用beanFactory#getBean来显示实例化目标bean DatasourceLoader propertyLoader = this.beanFactory.getBean(DatasourceLoader.class); System.out.println(propertyLoader); } } 上面的实现比较简单,借助beanFactory#getBean来手动触发 bean 的实例,...
第四块就是调用beanFactory的三个方法,首先是调用setTempClassLoader置为null,官方给的注释是停止使用临时加载器;然后调用freezeConfiguration方法,官方给的注释是仅获取bean的定义元数据,不做其他操作;最后调用preInstantiateSingletons方法,从方法名来看这个方法会进行单例bean的预初始化操作,官方给的注释是实例化剩余的单...