1. 在dubbo包下/META-INF/spring.handlers这个文件中定义了。在spring加载时首先会扫描这个配置文件
文件内容如下
http://code.alibabatech.com/schema/dubbo=com.alibaba.dubbo.config.spring.schema.DubboNamespaceHandler
引用了一个类DubboNamespaceHandler,这个类实现了NamespaceHandlerSupport这个接口
实现了这个接口有什么用呢?
以后再看
2. spring在加载时会调用NamespaceHandlerSupport#init()这个方法
public void init() { registerBeanDefinitionParser("application", new DubboBeanDefinitionParser(ApplicationConfig.class, true)); registerBeanDefinitionParser("module", new DubboBeanDefinitionParser(ModuleConfig.class, true)); registerBeanDefinitionParser("registry", new DubboBeanDefinitionParser(RegistryConfig.class, true)); registerBeanDefinitionParser("monitor", new DubboBeanDefinitionParser(MonitorConfig.class, true)); registerBeanDefinitionParser("provider", new DubboBeanDefinitionParser(ProviderConfig.class, true)); registerBeanDefinitionParser("consumer", new DubboBeanDefinitionParser(ConsumerConfig.class, true)); registerBeanDefinitionParser("protocol", new DubboBeanDefinitionParser(ProtocolConfig.class, true)); registerBeanDefinitionParser("service", new DubboBeanDefinitionParser(ServiceBean.class, true)); registerBeanDefinitionParser("reference", new DubboBeanDefinitionParser(ReferenceBean.class, false)); registerBeanDefinitionParser("annotation", new DubboBeanDefinitionParser(AnnotationBean.class, true)); }
这个方法根据配置文件中各个配置项,将对应的配置转换为对应的配置信息
这里都new 了DubboBeanDefinitionParser这个类,这个类有两个构造参数一个是配置类,另外一个是是否required
这个类因为实现了BeanDefinitionParser接口,所以实现了接口的parse方法
public BeanDefinition parse(Element element, ParserContext parserContext)
这个方法会在spring初始化的时候被调用,具体什么时候调用要看springbean的生命周期了
在这个方法内注册了对应的beanClass,,将对应的beanClass注册到spring容器中。
这样就可以在其它地方对bean进行调用了。