服务导出⼤概原理(⾯试时可以这么答)
	
		服务导出的⼊⼝为ServiceBean中的export()⽅法,当Spring启动完之后,通过接收Spring的
		ContextRefreshedEvent事件来触发export()⽅法的执⾏。
		⼀个ServiceBean对象就表示⼀个Dubbo服务,ServiceBean对象中的参数就表示服务的参数,⽐如
		timeout,该对象的参数值来⾄@Service注解中所定义的。
		 
	
		服务导出主要得做两件事情:
		1. 根据服务的参数信息,启动对应的⽹络服务器(netty、tomcat、jetty等),⽤来接收⽹络请求
		2. 将服务的信息注册到注册中⼼
		 
	
		但是在做这两件事情之前得先把服务的参数确定好,因为⼀个Dubbo服务的参数,除开可以在@Service注
		解中去配置,还会继承Dubbo服务所属应⽤(Application)上的配置,还可以在配置中⼼或JVM环境变量
		中去配置某个服务的参数,所以⾸先要做的是确定好当前服务最终的(优先级最⾼)的参数值。
		确定好服务参数之后,就根据所配置的协议启动对应的⽹络服务器。在启动⽹络服务器时,并且在⽹络服
		务器接收请求的过程中,都可以从服务参数中获取信息,⽐如最⼤连接数,线程数,socket超时时间等
		等。
		 
	
		启动完⽹络服务器之后,就将服务信息注册到注册中⼼。同时还有向注册中⼼注册监听器,监听Dubbo的
		中的动态配置信息变更。
		 
	
		服务概念的演化
	
		1. DemoService接⼝表示⼀个服务,此时的服务表示服务定义
		2. DemoServiceImpl表示DemoService服务的具体实现,此时的服务表示服务的具体实现
		3. DemoService+group+version表示⼀个服务,此时的服务增加了分组和版本概念
		4. http://192.168.1.112:80/com.tuling.DemoService表示⼀个服务,此时的服务增加了机器IP和Port,
		表示远程机器可以访问这个URL来使⽤com.tuling.DemoService这个服务
		5. http://192.168.1.112:80/com.tuling.DemoService?
		timeout=3000&version=1.0.1&application=dubbo-demo-provider-application表示⼀个服务,
		此时的服务是拥有参数的,⽐如超时时间、版本号、所属应⽤
		在dubbo中就是⽤的最后⼀种⽅式来表示服务的。
		服务导出要做的⼏件事情:
		1. 确定服务的参数
		2. 确定服务⽀持的协议
		3. 构造服务最终的URL
		4. 将服务URL注册到注册中⼼去
		5. 根据服务⽀持的不同协议,启动不同的Server,⽤来接收和处理请求
		6. 因为Dubbo⽀持动态配置服务参数,所以服务导出时还需要绑定⼀个监听器Listener来监听服务的参数
		是否有修改,如果发现有修改,则需要重新进⾏导出