Dubbo 通过Spring 配置具体启动服务
2016-03-25 17:04
555 查看
dubbo 服务的启动加载过程,请先看 : http://www.cnblogs.com/ghj1976/p/5316126.html
以 dubbo-demo-provider-2.5.4-SNAPSHOT 为例, 把这个文件当zip文件解压缩后,
我们在其中可以找到 spring 的 配置文件: dubbo-demo-provider.xml
内容如下:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<bean id="demoService" class="com.alibaba.dubbo.demo.provider.DemoServiceImpl" />
<dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" />
</beans>
Spring其实就是一个大型的工厂,而Spring容器中的Bean就是该工厂的产品.对于Spring容器能够生产那些产品,则取决于配置文件中配置。
对于我们而言,我们使用Spring框架所做的就是两件事:开发Bean、配置Bean。对于Spring矿建来说,它要做的就是根据配置文件来创建Bean实例,并调用Bean实例的方法完成“依赖注入”。
<beans…/>元素是Spring配置文件的根元素,<bean…/>元素师<beans../>元素的子元素,<beans…/>元素可以包含多个<bean…/>子元素,每个<bean…/>元素可以定义一个Bean实例,每一个Bean对应Spring容器里的一个Java实例定义Bean时通常需要指定两个属性。
Id:确定该Bean的唯一标识符,容器对Bean管理、访问、以及该Bean的依赖关系,都通过该属性完成。Bean的id属性在Spring容器中是唯一的。
Class:指定该Bean的具体实现类。注意这里不能使接口。通常情况下,Spring会直接使用new关键字创建该Bean的实例,因此,这里必须提供Bean实现类的类名。
Spring容器集中管理Bean的实例化,Bean实例可以通过BeanFactory的getBean(Stringbeanid)方法得到。BeanFactory是一个工厂,程序只需要获取BeanFactory引用,即可获得Spring容器管理全部实例的引用。程序不需要与具体实例的实现过程耦合。大部分Java EE应用里,应用在启动时,会自动创建Spring容器,组件之间直接以依赖注入的方式耦合,甚至无须主动访问Spring容器本身。
当我们在配置文件中通过<bean id=”xxxx” class=”xx.XxClass”/>方法配置一个Bean时,这样就需要该Bean实现类中必须有一个无参构造器。故Spring底层相当于调用了如下代码:
Spring 有一种配置文件加载设置:ClassPathXmlApplicationContext
ClassPathXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。在这里,你不需要提供 XML 文件的完整路径,只需正确配置 CLASSPATH 环境变量即可,因为,容器会从 CLASSPATH 中搜索 bean 配置文件。
有关ClassPathXmlApplicationContext 的信息请参考:
http://www.blogjava.net/xcp/archive/2011/06/22/352821.html
http://www.blogjava.net/wangkai40/archive/2009/08/28/292927.html
http://heisetoufa.iteye.com/blog/1671306
这里用的 classpath*:META-INF/spring/*.xml 中信息介绍如下:
classpath*: 可以加载多个配置文件,如果有多个配置文件,就用这个。
classpath*:的使用是为了多个component(最终发布成不同的jar包)并行开发,各自的bean定义文件按照一定的规则:package+filename,而使用这些component的调用者可以把这些文件都加载进来.
classpath*:的加载使用了classloader的
参考: http://blog.csdn.net/kkdelta/article/details/5507799
完整的启动加载过程如下图:
参考资料:
http://dubbo.io/Configs-zh.htm
以 dubbo-demo-provider-2.5.4-SNAPSHOT 为例, 把这个文件当zip文件解压缩后,
我们在其中可以找到 spring 的 配置文件: dubbo-demo-provider.xml
内容如下:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<bean id="demoService" class="com.alibaba.dubbo.demo.provider.DemoServiceImpl" />
<dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" />
</beans>
Spring其实就是一个大型的工厂,而Spring容器中的Bean就是该工厂的产品.对于Spring容器能够生产那些产品,则取决于配置文件中配置。
对于我们而言,我们使用Spring框架所做的就是两件事:开发Bean、配置Bean。对于Spring矿建来说,它要做的就是根据配置文件来创建Bean实例,并调用Bean实例的方法完成“依赖注入”。
<beans…/>元素是Spring配置文件的根元素,<bean…/>元素师<beans../>元素的子元素,<beans…/>元素可以包含多个<bean…/>子元素,每个<bean…/>元素可以定义一个Bean实例,每一个Bean对应Spring容器里的一个Java实例定义Bean时通常需要指定两个属性。
Id:确定该Bean的唯一标识符,容器对Bean管理、访问、以及该Bean的依赖关系,都通过该属性完成。Bean的id属性在Spring容器中是唯一的。
Class:指定该Bean的具体实现类。注意这里不能使接口。通常情况下,Spring会直接使用new关键字创建该Bean的实例,因此,这里必须提供Bean实现类的类名。
Spring容器集中管理Bean的实例化,Bean实例可以通过BeanFactory的getBean(Stringbeanid)方法得到。BeanFactory是一个工厂,程序只需要获取BeanFactory引用,即可获得Spring容器管理全部实例的引用。程序不需要与具体实例的实现过程耦合。大部分Java EE应用里,应用在启动时,会自动创建Spring容器,组件之间直接以依赖注入的方式耦合,甚至无须主动访问Spring容器本身。
当我们在配置文件中通过<bean id=”xxxx” class=”xx.XxClass”/>方法配置一个Bean时,这样就需要该Bean实现类中必须有一个无参构造器。故Spring底层相当于调用了如下代码:
Xxx = new xx.XxClass()
参考: http://blog.csdn.net/chenssy/article/details/8222744Spring 有一种配置文件加载设置:ClassPathXmlApplicationContext
ClassPathXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。在这里,你不需要提供 XML 文件的完整路径,只需正确配置 CLASSPATH 环境变量即可,因为,容器会从 CLASSPATH 中搜索 bean 配置文件。
有关ClassPathXmlApplicationContext 的信息请参考:
http://www.blogjava.net/xcp/archive/2011/06/22/352821.html
http://www.blogjava.net/wangkai40/archive/2009/08/28/292927.html
http://heisetoufa.iteye.com/blog/1671306
这里用的 classpath*:META-INF/spring/*.xml 中信息介绍如下:
classpath*: 可以加载多个配置文件,如果有多个配置文件,就用这个。
classpath*:的使用是为了多个component(最终发布成不同的jar包)并行开发,各自的bean定义文件按照一定的规则:package+filename,而使用这些component的调用者可以把这些文件都加载进来.
classpath*:的加载使用了classloader的
getResources()方法,如果是在不同的J2EE服务器上运行,由于应用服务器提供自己的classloader实现,它们在处理jar文件时的行为也许会有所不同。 要测试
classpath*:是否有效,可以用classloader从classpath中的jar文件里加载文件来进行测。
参考: http://blog.csdn.net/kkdelta/article/details/5507799
完整的启动加载过程如下图:
参考资料:
http://dubbo.io/Configs-zh.htm
相关文章推荐
- Java中Date( )与Calendar( )简单算法
- Java编程思想重点笔记(Java开发必看)
- Java获取时间与系统时间相差8小时终极解决方案
- MyCAT报java.lang.OutOfMemoryError: Java heap space
- 数组求最大最小值
- 19、在 java web开发中怎么使用json?
- shh整合后web.xml、spring配置文件和struts.xml的内容
- Spring中AOP基本概念及配置方式
- 调用java的webservice返回null
- Java EE实现直接进入登录界面-JS页面跳转(一)
- Java中的IP对象以及本地域名解析
- Jsp El表达式使用问题javax.el.ELException: Failed to parse the expression
- Spring batch 入门学习教程(附源码)
- java中常见的3种自动任务
- Java8初体验 Stream语法详解
- java实现七个医生值班问题
- 深入理解Java:注解(Annotation)--注解处理器
- Java Socket编程
- wsdl 关于nillable和minOccurs 在.NET和java中的不同
- java中一对多 关联建表