Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring上下文:布尔值的属性占位符_Java_Spring_Boolean_Applicationcontext - Fatal编程技术网

Java Spring上下文:布尔值的属性占位符

Java Spring上下文:布尔值的属性占位符,java,spring,boolean,applicationcontext,Java,Spring,Boolean,Applicationcontext,我正在开发一个应用程序,其中有两个类都实现了一个公共接口。所以,在声明bean时,我将在app-context.xml文件中标记其中一个primary。我可以通过如下简单地声明主bean来实现这一点: <bean id="oracleImpl" class="com.me.dao.OracleImpl" primary="true"> </bean> <context:property-placeholder location="classpath:jdbc.pr

我正在开发一个应用程序,其中有两个类都实现了一个公共接口。所以,在声明bean时,我将在app-context.xml文件中标记其中一个primary。我可以通过如下简单地声明主bean来实现这一点:

<bean id="oracleImpl" class="com.me.dao.OracleImpl" primary="true">
</bean>
<context:property-placeholder location="classpath:jdbc.properties"/>

<bean id="oracleImpl" class="com.me.dao.OracleImpl" primary="${oracle.primary}">
</bean>

<bean id="pgsqlImpl" class="com.me.dao.PgsqlImpl" primary="${pgsql.primary}">
</bean>

现在我不想硬编码哪个bean将成为主bean,而是想从属性文件中读取真/假值。所以我这样说:

<bean id="oracleImpl" class="com.me.dao.OracleImpl" primary="true">
</bean>
<context:property-placeholder location="classpath:jdbc.properties"/>

<bean id="oracleImpl" class="com.me.dao.OracleImpl" primary="${oracle.primary}">
</bean>

<bean id="pgsqlImpl" class="com.me.dao.PgsqlImpl" primary="${pgsql.primary}">
</bean>

oracle.primary和pgsql.primary的值与其他jdbc(非布尔)属性一起定义在文件jdbc.properties中

但是它不起作用,并且说,“${oracle.primary}”不是“boolean”的有效值”

我觉得这与xsd验证器有关。浏览这个网站和谷歌给了我这么多的想法,但没有得到真正的解决方案。有人能帮忙吗?

这行不通

从3.2.5.1开始,仅发布以下bean定义元素支持属性占位符:

  • 父名称
  • bean类名
  • 工厂bean名称
  • 工厂方法名称
  • 范围
  • 属性值
  • 索引构造函数参数
  • 泛型构造函数参数
有关详细信息,请参阅的
visitBeanDefinition
方法。此方法由用户使用

我建议您在中创建一个功能请求


PS:如果创建问题,请在问题url中添加注释。

com.me.dao.OracleImpl中主字段的setter是什么样子的?primary不是com.me.dao.OracleImpl中的字段。它相当于spring注释@primary。当同一类中有多个bean时,它用于声明一个bean是自动连接的主要候选对象。感谢您的澄清。“你能提出一些建议吗?”“等待和平”我仔细查看了源代码,我必须说没有简单的方法可以做到这一点。原因是
BeanDefinition
的主要属性类型为
boolean
。因此,在创建
BeanDefinition
对象时,已经解释了xml属性值。因此,您无法实现自己的
属性PlaceHolderConfigure
。也许您可以实现自己的
DefaultListableBeanFactory
并重写方法
isPrimary
,或者您将找到一种方法,告诉spring使用您实现的特殊
BeanDefinitionParserDelegate
。祝你好运:)谢谢你的时间:)你真的很努力地帮助我,但我是新手,所以我想这次我会用硬编码的方式。再次感谢。