当设置具有模糊setter方法的bean的属性时,我遇到了一个问题。
问题是主机配置。HttpClient的host属性有3种可能的使用方法:
这是我的bean定义:
<bean id="primaryClient" class="org.apache.commons.httpclient.HttpClient">
<property name="hostConfiguration.host">
<bean class="org.apache.commons.httpclient.HttpHost" >
<constructor-arg value="somelink.com"/>
<constructor-arg value="443"/>
<constructor-arg>
<bean class="org.apache.commons.httpclient.protocol.Protocol">
<constructor-arg value="https"/>
<constructor-arg ref="sslProtocolSocketFactory"/>
<constructor-arg value="443"/>
</bean>
</constructor-arg>
</bean>
</property>
</bean>
这是堆栈:
造成的原因:org.springframework.beans.factory.BeanCreationException:错误创建的bean与名称'主客户端'定义在类路径资源[Spring/test-merchantlink-context.xml]:错误设置属性值;嵌套异常是org.springframework.beans.属性BatchUpdateException;嵌套属性访问异常(1)是:属性访问异常1:org.springframework.beans.类型错误匹配异常:无法将属性值的类型[org.apache.commons.httpclient.HttpHost]转换为所需的类型[java.lang.字符串]属性'主机Configuration.host';嵌套异常是java.lang.IllegalArgumentException:无法将类型[org.apache.commons.httpclient.HttpHost]的值转换为所需的类型java.lang.[字符串]属性'主机':没有找到匹配的编辑器或转换策略
我怎么能避开这个?我用的是Spring 2.5.6
似乎必须显式指定预期的类名,以避免多个可用setter之间的歧义。
可能是这样的:
<bean id="primaryClient" class="org.apache.commons.httpclient.HttpClient">
<property name="hostConfiguration.host">
<bean class="org.apache.commons.httpclient.HttpHost" >
<constructor-arg type="java.lang.String">
<value>somelink.com</value>
</constructor-arg>
<constructor-arg type="int">
<value>443</value>
</constructor-arg>
<constructor-arg>
<bean class="org.apache.commons.httpclient.protocol.Protocol">
<constructor-arg value="https"/>
<constructor-arg ref="sslProtocolSocketFactory"/>
<constructor-arg value="443"/>
</bean>
</constructor-arg>
</bean>
</property>
</bean>
您应该避免重载希望能够使用IoC连接的属性设置器。当(逻辑上)同一个属性确实需要两个setter时,应该使用不同的setter名称。。。和javadoc注释来解释发生了什么。
同样的问题http://forum.spring.io这说明了同样的问题,更好的解决方案是重命名所有方法。
链接1
链接2
链接3
基本上,重载setter违反了JavaBeans规范,因此spring不支持。你可以看到https://jira.spring.io/browse/SPR-4931了解更多详细信息。
由于您可能没有创建HttpClient,因此无法更改它,一种解决方案是使用工厂bean。这看起来像这样:
<bean id="httpClientFactory" class="my.package.HttpClientFactory"/>
<bean id="primaryClient" factory-bean="httpClientFactory" factory-method="create">
您将在HttpClientFactor上实现create()
方法my.package.设置并返回您的工厂。
如果要在XML配置中而不是在代码中设置特定参数,可以将构造函数参数添加到my。包裹HttpClientFactor。
我正在使用mapstruct从一个DTO映射到另一个DTO。我有多个默认方法,但其中两个返回值为String,并且使用了与输入参数相同的类,这给了我“使用java MapStruct的mapping methods不明确”的错误。我在这里添加代码的相关部分: 错误是 发现将属性“Program ProgramInstance”映射到java.lang.String的映射方法不明确:java.lan
我和jee和wildfly一起工作了几天,现在我有问题了。我创建了这样的东西: 接下来,我尝试在jsf中使用,但遇到了异常: 2017-05-23 08:49:07,447]工件EAR:EAR:工件部署过程中出错。有关详细信息,请参阅服务器日志。 > 带有限定符[@default@named@any]的生产者方法[List]声明为[[BackedAnnotatedMethod]@produces@
有两种类型的对象属性。 第一种是 数据属性。我们已经知道如何使用它们了。到目前为止,我们使用过的所有属性都是数据属性。 第二种类型的属性是新东西。它是 访问器属性(accessor properties)。它们本质上是用于获取和设置值的函数,但从外部代码来看就像常规属性。 Getter 和 setter 访问器属性由 “getter” 和 “setter” 方法表示。在对象字面量中,它们用 get
这是我的实用程序java文件: Spring-servlet.xml: 当我运行时,我得到以下错误: org.springframework.beans。NotWritablePropertyException:bean类[com.chrysler.Utilities.HibernateUtil]的属性“sessionFactory”无效:bean属性“sesionFactory'不可写或具有无效
我知道这个问题已经被问了很多次,但在我看来一切都是正确的。我还从Eclipse中删除了我的代码,让IDE创建getter/setter,但没有用。 这是我在网络逻辑中的错误: 原因:豆类属性“gpsDataAllStopsSql”无效:bean 类的属性“gpsDataAllStopsSql”无效:bean 属性“gpsDataAllSTopsSql”无效,或者具有无效的 setter 方法。二极
问题内容: A类提供一个字符串值。类B在其内部具有两个A类型的成员,并提供一个计算属性“ v”来选择其中之一。 这段代码很简单,可以正常工作。由于A和B都具有成员“值”,因此我将其设为这样的协议: 如果我更改以下代码 至 它再次起作用! 这是Swift的错误,还是协议属性的特殊之处? 问题答案: 您必须将协议定义为协议: 然后 编译并按预期方式工作(即,将新值分配给if 所引用的对象,否则分配给否