Spring自定义NamespaceHandler
spring中在使用xml进行bean配置时,我们经常出现
<context:annotation-config/>
这样的配置,或是在使用dubbo时,暴露服务时,使用
<dubbo:service interface="xxx" ref="yyy" />
,我们知道仅仅通过这些简单的配置,其实完成了很多工作,那么我们能不能也实现这种功能,仅通过简单的配置,实现bean定义加载的过程中细节的隐藏,但完成复杂的功能呢?
答案是肯定的,方法是我们使用自定义NamespaceHandler进行处理,具体步骤如下:
说明:下面模拟spring bean定义功能,使用我们自定义的方式来实现CustomBean注入到Spring容器中,具体用法如下:
<custom:bean class="com.lcl.spring.beans.CustomBean"></custom:bean>
1、定义Bean
package com.lcl.spring.beans;
public class CustomBean {
public void sayHi(){
System.out.println("Hello Custom NamespaceHandler");
}
}
我们想把这个类通过xml方式注入到spring容器中
2、编写自定义NamespaceHandler
NamespaceHandler的功能就是解析我们自定义的custom命名空间的,为了方便起见,我们实现NamespaceHandlerSupport,其内部通过BeanDefinitionParser对具体的标签进行处理,即对我们定义的<custom:bean/>
进行具体处理。
NamespaceHandler实现如下:
package com.lcl.spring.ext;
import org.springframework.beans.factory.xml<