Spring xml配置文件中命名空间的实现

1 在spring中使用xml配置bean的时候 ,我们可能会使用到其他的命名空间。例如我们配置aop.

<?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:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd ">
    <aop:config>
        <aop:aspect id="myAspect" ref="aBean">
        ...
        </aop:aspect>
    </aop:config>
</beans>

那么这个aop前缀是怎么起作用的呢,这里的作用包含两部分一部分是校验格式,一部分是通过这些配置创建对应的java对象。

 那么xsd这个文件在什么地方呢,有人可能会说指向 网上的一个链接,如果没有网呢,就不能校验了吗,事实上现代的一些集成环境是可以的 。这个文件其实在spring的jar包里面。在META-INFO/spring-schemals的文件中是会配置文件的真实的位置的。

这样就可以 在classpath下面找到对应的xsd文件。

解决了校验 的问题,还有一个就是怎么通过配置的标签创建对象的问题。 同样的在meta-info/spring-handlers文件中配置对应的类。

我们打开这个类



package org.springframework.aop.config;

import org.springframework.aop.aspectj.AspectJExpressionPointcut;
import org.springframework.beans.factory.xml.BeanDefinitionParser;
import org.springframework.beans.factory.xml.NamespaceHandlerSupport;


public class AopNamespaceHandler extends NamespaceHandlerSupport {

	@Override
	public void init() {
		// In 2.0 XSD as well as in 2.5+ XSDs
		registerBeanDefinitionParser("config", new ConfigBeanDefinitionParser());
		registerBeanDefinitionParser("aspectj-autoproxy", new AspectJAutoProxyBeanDefinitionParser());
		registerBeanDefinitionDecorator("scoped-proxy", new ScopedProxyBeanDefinitionDecorator());

		// Only in 2.0 XSD: moved to context namespace in 2.5+
		registerBeanDefinitionParser("spring-configured", new SpringConfiguredBeanDefinitionParser());
	}

}

可以发现对每一个命名空间下面支持的标签都设置了对应的BeanDefinition的解析器,这样这项标签就会被 创建成为BeanDefinition.spring就可以 使用BeanDefinition创建对象了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值