Spring:禁用验证还会禁用自动装配?

时间:2015-07-23 16:44:15

标签: spring validation

因为我必须学习典型的Spring配置文件头,例如:

<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"
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd"
    default-autowire="byName">
    ...

确实导致Spring伸出手并从Internet获取引用的.xsd文件以验证配置文件。如果无法找到或下载这些模式,则会失败。

由于我正在开发的代码稍后将在无法访问互联网的服务器上运行,因此我需要阻止这一点!为此,我想简单地禁用验证(这没有问题,因为配置文件在代码运行之前已经过全面测试)。

所以我提出了从ClassPathXmlApplicationContext派生的以下类,该类覆盖单个方法以禁用配置文件验证:

ClassPathXmlApplicationContext appSpringContext = 
    new ClassPathXmlApplicationContext(new String[] { 
        "config/context_basicfw.xml",
        "config/context_sbase.xml",
        "config/openApi.xml",
    }) {
    @Override
    protected void initBeanDefinitionReader(XmlBeanDefinitionReader beanDefinitionReader) {
        super.initBeanDefinitionReader(beanDefinitionReader);
        beanDefinitionReader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_NONE);
        beanDefinitionReader.setNamespaceAware(true);
    }
};

但令我沮丧的是,这不仅禁用了验证,而且 - 出于一些奇怪的原因 - 也是豆子的自动连线!即如果我在重写方法initBeanDefinitionReader()中注释掉两个添加的行(在超级调用之后),那么我的代码运行正常。如果我启用这两行,那么初始化运行正常而不下载任何模式但我的代码稍后会抛出NullPointerExceptions,因为应该通过自动连接分配的几个bean仍为空。

如何在保持Spring完整功能的同时禁用Spring的配置文件验证,特别是自动布线?

注意:我知道我可以将配置文件更改为指向模式的本地副本,但这仅适用于我控制的配置文件。但是,我们正在使用一些包含自己的配置文件的.jars,其中包含如上所述的标题,并且 - 如果可能的话 - 我不想触摸它们,而是按原样使用它们,即无需解压缩它们,修改弹簧配置文件并重新打包它们。

任何想法或建议任何人,如何告诉Spring跳过验证,但仍然进行自动连线? BTW:我被迫仍然使用Spring v2.0,没有更高版本!

0 个答案:

没有答案