【问题标题】:Bean property 'iUserGeneratorInterface' is not writable or has an invalid setter methodBean 属性“iUserGeneratorInterface”不可写或设置方法无效
【发布时间】:2014-10-04 20:12:03
【问题描述】:

我的项目结构如下 [1]:http://i.stack.imgur.com/T1jvh.png

我在 create-user 中定义了一个类和接口

用户生成器接口

package com.credit.userGenerator;
public interface UserGeneratorInterface {
    public String userIdGenerator();
}

RandomUserGenerator.java

public class RandomUserGenerator implements UserGeneratorInterface {
    public static enum Mode {
        ALPHA, ALPHANUMERIC, NUMERIC 
    }
    public static String generateRandomString(int length, Mode mode) throws Exception {
                code logic
    }
    public String userIdGenerator(){
      code logic
    }
}

我已经在 da-web 和 wan 中定义了应用程序上下文以获取 RandomUserGenerator.java 的服务

public class ApplicationSignManager implements IApplicationSignInterface {
public UserGeneratorInterface iUserGeneratorInterface;
public UserGeneratorInterface getiUserGeneratorInterface() {
    return iUserGeneratorInterface;
}
public void setiUserGeneratorInterface(
        UserGeneratorInterface iUserGeneratorInterface) {
    this.iUserGeneratorInterface = iUserGeneratorInterface;
    }
}

AppContext.xml

<bean id="userGenerator" class="com.credit.userGenerator.RandomUserGenerator" ></bean>
<bean id="appSign" class="com.*****.service.ApplicationSignManager">
 <description>List of Dao in ApplicationLogin Manager</description>
 <property name="userGeneratorInterface" ref="userGenerator"/>
</bean>

但我收到以下异常

Bean 属性“iUserGeneratorInterface”不可写或设置方法无效。 setter的参数类型和getter的返回类型是否匹配?

【问题讨论】:

  • 确实如此。如果 bean 属性(字段)名称为 iUserGeneratorInterface,则 setter 名称应为 setIUserGeneratorInterface。注意大写I。也适用于吸气剂。为了清楚起见,最好叫它userGeneratorInterface
  • 错误仍然存​​在。在 ServletContextresource[/WEBINF/applicationFlowContext.xml] 中定义名称为 'appSign' 创建 bean 时出错:设置属性值时出错;嵌套异常是 org.springframework.beans.NotWritablePropertyException:bean 类 [com.bhaskar.service.ApplicationSignManager] 的无效属性“userGeneratorInterface”:Bean 属性“userGeneratorInterface”不可写或具有无效的 setter 方法。 setter的参数类型和getter的返回类型是否匹配?
  • 请问这个简单的问题,但是.. com.*****.service.UserGenerator 实现了 UserGeneratorInterface 吗?因为你的裁判使用了com.*****.service.UserGenerator
  • 感谢 Xstian 指出错字。我已经编辑了帖子

标签: spring


【解决方案1】:
  1. 正如在 cmets 中所注意到的,使用 setIUserGeneratorInterface() 和 getIUserGeneratorInterface() 以及大写“I”。
  2. 使用'property name="iUserGeneratorInterface" ref="userGenerator"' - 注意前导'i'。

请注意,在命名类和字段时,始终建议使用成熟的做法。在您的情况下,将“UserGeneratorInterface”命名为“UserGenerator”并将字段“iUserGeneratorInterface”命名为“userGenerator”会更有意义。另请注意,您已将该字段声明为公开(尽管这与错误无关)。

【讨论】:

    【解决方案2】:

    你的 bean id="userGenerator"
    使用这个“userGenerator”就像 (public UserGeneratorInterface userGenerator;) 一样作为变量名。 并为此变量创建getter、setter 那就试试吧

    【讨论】:

      猜你喜欢
      • 2013-01-31
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 2018-09-26
      • 2015-09-07
      • 1970-01-01
      相关资源
      最近更新 更多