Spring 自动注册Bean(xml配置文件解析)

        DefaultListableBeanFactory是整个bean加载的核心部分,它是Spring注册及加载bean的默认实现。

        XmlBeanFactory继承自DefaultListableBeanFactory,不同的地方是在XmlBeanFactory中使用了自定义的XML读取器XmlBeanDefinitionReader,实现了XML配置文件(包括自定义标签/个性化读取)的读取.

        根据配置文件,创建XmlBeanFactory实例对象,然后再调用getBean方法获得相应的bean实例.

XmlBeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("bean.xml"));
Gun gun = beanFactory.getBean("m416", Gun.class)

内部流程:

new ClassPathResource(xxx.xml)

将配置文件转换为Resource资源实例

        loadBeanDefinitions(encodedResource)

        将Resource转为为输入流资源InputResource.

                doLoadBeanDefinitions(...)

                        doLoadDocument(...)

                        然后将Resource封装为Document实例对象.

                        registerBeanDefinitions(...)

                        注册BeanDefinition

                                parseBeanDefinitions(root, this.delegate)

                                会根据nameSpace判断是进行默认标签解析还是自定义标签解析

                                        parseDefaultElement(ele, delegate)

                                        针对不同标签进行解析(<bean>/<beans>/<import>/<alias>)

                                        比如, 解析beanbean标签方法:processBeanDefinition(ele, delegate):

                                                ① 提取Element元素中的“id”和“name”属性,并将name解析为

                                        aliases,然后为beanName赋值。

                                                ② 解析其他属性并封装到GenericBeanDefinition类型的实例中。

                                                ③ 如果发现bean没有指定beanName,那么使用默认规则生成

                                        beanName。

                                                ④ 将获取到的信息封装到BeanDefinitionHolder类型的实例中。

                                                最终, 通过标签的id(beanName)以及别名(alias)就可以从容器中拿

                                        到bean的实例对象.

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值