gpt4 book ai didi

java - Spring使用ref标签的本地属性引用存在于其他xml中的bean

转载 作者:行者123 更新时间:2023-11-30 03:47:21 36 4
gpt4 key购买 nike

我正在创建示例 spring 程序来理解 ref 标记的本地属性。

我创建了两个 bean 文件

第一个[applicationcontext.xml]

    <bean class="org.vik.spring.SequenceGenerator" name="sequenceProperty_Other">
<property name="prefix">
<ref local="prefixGeneratorOther" />
</property>
<property name="suffix" value="23"></property>
</bean>

第二个 xml 文件 [prefix_context.xml]

<bean class="org.vik.spring.DatePrefixGenerator" id="prefixGeneratorOther" p:prefix="other"/>

我创建了如下所示的应用程序上下文

ApplicationContext applicationContext  = new FileSystemXmlApplicationContext("applicationcontext.xml" ,"prefix_context.xml");

当我请求bean“sequenceProperty_Other”时,spring成功返回它

SequenceGenerator sequenceConstrutornerator = applicationContext.getBean( "sequenceProperty_Other",SequenceGenerator.class);

我能从this中了解到什么,是因为“prefixGeneratorOther”bean 不在同一个 xml 文件(applicationcontext.xml)中,并且我使用本地属性来引用它,Spring 应该通过异常。但就我而言,它有效。我是不是错过了什么?

applicationContext.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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<!-- <bean class="org.vik.spring.SequenceGenerator" name="sequence"> </bean> -->

<bean class="org.vik.spring.DatePrefixGenerator" id="prefixGenerator"
p:prefix="122333">

</bean>
<bean class="org.vik.spring.SequenceGenerator" name="sequenceProperty_Locale">
<property name="prefix">
<ref local="prefixGenerator" />
</property>

<property name="suffix" value="23"></property>
</bean>

<bean class="org.vik.spring.SequenceGenerator" name="sequenceProperty_Other">
<property name="prefix">
<ref local="prefixGeneratorOther" />
</property>
<property name="suffix" value="23"></property>
</bean>

prefix_context.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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean class="org.vik.spring.DatePrefixGenerator" id="prefixGeneratorOther" p:prefix="other"/>

</beans>

Java 类

    ApplicationContext applicationContext = new FileSystemXmlApplicationContext("applicationcontext.xml",
"prefix_context.xml");

System.out.println(applicationContext.getBean("prefixGenerator", PrefixGenerator.class).getPrefix());


SequenceGenerator sequenceProperty = applicationContext.getBean("sequenceProperty_Locale",
SequenceGenerator.class);
System.out.println(sequenceProperty);


SequenceGenerator sequenceConstrutornerator = applicationContext.getBean("sequenceProperty_Other",
SequenceGenerator.class);
System.out.println(sequenceConstrutornerator);

最佳答案

此特定行为适用于 3.x 分支中 Spring 3.1.0(包含)之后的任何版本。如果您使用最新的 3.0.x(即 3.0.7)对此进行测试,您将得到一个异常。如果您使用 Spring 4 进行测试,您将得到一个异常,但是是一个不同的异常。

如果你仔细看看Spring 3.0.7中的异常,这是指XML解析:

at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:347)
at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:75)

这意味着限制是在 xml 模式级别(我相信它也是在 Java 代码级别)。

由于 JIRA issue,此行为在 Spring 3.1.0(及更高版本)中发生了变化。 。从所有与它相关的 JIRA 问题来看,this one似乎解释了发生的事情:该限制已从 3.1 模式中消除,ref local 进入一种“已弃用”状态(因为在 3.1.x 和 3.2.x 中可以使用它)并且在 Spring 4 中,ref local 已被完全消除。 Spring 4 the documentation says ref local is not supported anymore而且,xsd 架构也已更新(从某种意义上说,ref 不再接受 local)。

关于java - Spring使用ref标签的本地属性引用存在于其他xml中的bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25307876/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com