我在程序中使用hsqldb作为db。我想在spring上注入构造函数值。
这是我的豆子:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="ConnectionManager" class="at.tuwien.group2.vpm.persistence.ConnectionManager"
scope="singleton">
<constructor-arg name="url" value="jdbc:hsqldb:file:vpmDatabasetest" />
<constructor-arg name="user" value="sa" />
<constructor-arg name="password" value="" />
</bean>
我的构造函数看起来像这样:
public ConnectionManager(String url, String user, String password) {
if(url == null || user == null || password == null) {
throw new NullPointerException("Paramaeter cannot be null!");
}
this.url = url;
this.user = user;
this.password = password;
}
但是,当我想执行代码时,我得到了:
属性'name'不允许出现在元素'constructor-arg'
中属性'name'不允许出现在元素'constructor-arg'
中我应该使用什么?
答案 0 :(得分:10)
使用Spring 3.1.2库时遇到了同样的问题。 我的错误是我使用旧的架构位置。 当我从
改变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"
到
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd"
使用named而不是indexed constructor-args。
答案 1 :(得分:9)
我猜你使用的是Sping 2.x.使用 index 属性明确指定构造函数参数的索引:
<bean id="ConnectionManager" ...>
<constructor-arg index="0" value="jdbc:hsqldb:file:vpmDatabasetest" />
<constructor-arg index="1" value="sa" />
<constructor-arg index="2" value="" />
</bean>
此外,从 Spring 3.0 开始,您还可以使用构造函数参数名称来消除歧义。
答案 2 :(得分:0)
只需删除名称属性
即可<bean id="ConnectionManager" class="at.tuwien.group2.vpm.persistence.ConnectionManager"
scope="singleton">
<constructor-arg value="jdbc:hsqldb:file:vpmDatabasetest" />
<constructor-arg value="sa" />
<constructor-arg value="" />
</bean>
它会起作用。并获得最新的Spring版本,您似乎使用的是旧版本。另外,我建议将http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/作为有关Spring的主要信息来源。
答案 3 :(得分:0)
如果您使用Maven,请尝试添加较新的spring-beans依赖项。我通过更新jar依赖项而不更新xsd版本来解决此问题。