当前位置:XML > XML市场

SpringBean的生命周期阶段2B

北京专治疗白癜风的医院 https://jbk.39.net/yiyuanzaixian/bjzkbdfyy/bdf/

Bean元信息的解析就是将各种方式定义的bean配置信息解析为BeanDefinition对象。

XML方式解析:XmlBeanDefinitionReader

Spring中提供了一个类XmlBeanDefinitionReader,将xml中定义的bean解析为BeanDefinition对象。

直接来看案例代码。来一个beanxml配置文件:

将beanxml解析为BeanDefinition对象

创建XmlBeanDefinitionReader的时候需要传递一个bean注册器(BeanDefinitionRegistry),解析过程中生成的BeanDefinition会丢到bean注册器中。

运行输出:

这几个BeanDefinition都是GenericBeanDefinition这种类型的,也就是说xml中定义的bean被解析之后都是通过GenericBeanDefinition这种类型表示的。

properties文件定义bean的解析PropertiesBeanDefinitionReader`

Spring中提供了一个类XmlBeanDefinitionReader,将properties中定义的bean解析为BeanDefinition对象,过程和xml的方式类似。

下面通过properties文件的方式实现上面xml方式定义的bean。来个properties文件:beans.properties

将beanproperties文件解析为BeanDefinition对象

运行输出:

输出和xml方式输出基本上一致。properties方式使用起来并不是太方便,所以平时很少看到有人使用。

注解方式:AnnotatedBeanDefinitionReader

注解的方式定义的bean,需要使用AnnotatedBeanDefinitionReader这个类来进行解析,方式也和上面2种方式类似,直接来看案例。

通过注解来标注2个类,Service1:

这个类上面使用了3个注解来配置bean的信息,上面这个bean是个多例的。

Service2:

标注了

Autowired,说明需要注入这个对象。

注解定义的bean解析为BeanDefinition,如下:

运行输出:

输出中可以看出service1这个bean的beanDefinition中lazyInit确实为true,primary也为true,scope为prototype,说明类Service1注解上标注3个注解信息被解析之后放在了beanDefinition中。

注意下:最后一行中的service1为什么为null,不是标注了

Autowired么?

调整一下上面的代码,加上下面

1这行代码,如下:

再次运行一下,最后一行有值了:

为什么呢?往后看完阶段4到阶段10就明白了。




转载请注明:http://www.vviuov.com/jbwh/1064558.html