配置对象原理解析
理论基础:
生成配置对象有如下几种方式
1 @Configuration Bean 方式 比 如
2 xml方式 就不解释了
第一种方式,硬编码的方式 2第二种方式 xml配置文件过多导致维护困难效率低下。
springboot引入了一种思想,把属性文件中的对象自动提取属性 转化类型,生成对象注入到spring容器中。是不是又省事,又智能,举个例子 比如:dubbo.application.name=foo等价于<dubbo:application name="foo" />,
那是怎样做到的呢?如果让你做。你应该怎做呢?
1 即使自动化,我映射到bean的哪个类型呢?总有对应的类型吧。总不能胡乱映射吧。
2我映射到了对应的类型,我值怎转化的?怎转成成对应的类型的?总有这个功能吧。这就是spring提供的 动态生成bean,和数值动态绑定功能。
下面我们看一下具体是如何搞的
步骤说明:
1.参数attributes就是@EnableDubboConfigBinding里面的属性,获取prefix属性值,就是获取到了:dubbo.application
例:
@EnableDubboConfigBinding(prefix = "dubbo.application", type = ApplicationConfig.class)
2.获取dubbo的配置类的class,也就是获取到了ApplicationConfig.class
3.获取multiple的值,默认没有配置就是false
4.调用registerDubboConfigBeans方法生成dubbo的配置bean
@Service @Reference 注解实现的原理,
@Service 目标是定义一个dubbo bean ,需要注册到spring容器中,主要实现bean的动态定义和注入,
实现步骤,
1扫描定义包路径,包含@Service的所有类,然后生成spring的beandefinition定义,
2 注册到spring容器中,并动态绑定数据。
@Reference 目的是 注入到其他已经生成的bean中,核心原理就在springbean 注入属性前,通过调用自定义属性。查找Referernce 注解标识的相关的字段,并设置属性。