【Pigeon源码阅读】整合Spring配置文件自定义命名空间解析(二)

1. xml文件配置示例

pigeon常用的配置方式是基于Spring Schema方式进行配置,pigeon自定义了一个xml命名空间解析器,用来解析以pigeon:xxx标志的xml配置,具体实例配置如下:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:pigeon="http://code.dianping.com/schema/pigeon"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
				http://code.dianping.com/schema/pigeon http://code.dianping.com/schema/pigeon/pigeon-service-2.0.xsd"
       default-autowire="byName">

    <!--定义独立的线程池 -->
    <pigeon:pool id="poolEcho" corePoolSize="5" maxPoolSize="20"
                 workQueueSize="50"/>


    <!-- 以服务方视角,定义一个pigeon服务,供客户端调用-->
    <pigeon:service
            url="com.dianping.pigeon.demo.EchoService"
            interface="com.dianping.pigeon.demo.EchoService"
            useSharedPool="false"
            ref="defaultEchoServiceImpl">
        <pigeon:method name="echo" pool="poolEcho"/>
    </pigeon:service>

    <!-- 定义一个pigeon服务器 -->
    <pigeon:server id="testServer" autoSelectPort="true" corePoolSize="150" httpPort="4080" maxPoolSize="300"
                   port="4040" suffix="test" workQueueSize="300"/>

    <!-- 扫描pigeon相关的注解属性,默认只扫描com.dianping包,如果非此包下的服务需要自定义package属性,多个package以逗号,分隔-->
    <pigeon:annotation id="testAnnotation" package="com.dianping"/>

    <!-- 以调用方视角,定义一个pigeon服务引用,通过RPC调用远程服务方服务-->
    <pigeon:reference id="echoServiceWithCallback"
                      interface="com.dianping.pigeon.demo.EchoService"
                      url="com.dianping.pigeon.demo.EchoService"
                      timeout="1000" protocol="default" serialize="hessian" callType="callback"
                      callback="echoServiceCallback"/>

</beans>

2. spring源码解析自定义标签流程

下面通过分析源码看pigeon是如何解析这些标签的。
基于以下测试代码在Spring容器中运行:

public static void main(String[] args) throws Exception {
   
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath*:META-INF/spring/schema/provider.xml");

    System.in.read();
}

分析Spring源码,在初始化容器解析xml,会经过以下路径:

  1. 调用ClassPathXmlApplicationContext构造函数
public ClassPathXmlApplicationContext(String configLocation) throws BeansException {
   
	this(new String[] {
   configLocation}, true, null);
}
//紧接着调用
ublic ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent)
		throws BeansException {
   

	super(parent
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值