Java Spring上下文:布尔值的属性占位符
我正在开发一个应用程序,其中有两个类都实现了一个公共接口。所以,在声明bean时,我将在app-context.xml文件中标记其中一个primary。我可以通过如下简单地声明主bean来实现这一点: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 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
。祝你好运:)谢谢你的时间:)你真的很努力地帮助我,但我是新手,所以我想这次我会用硬编码的方式。再次感谢。