java – 如何在Spring Framework中运行setter?

我是Spring Framework的新手.实际上我实际上正在做一个春天的实验.

看看这个HelloWorld.java:

public class HelloWorld {

    private String messageee;

    public void setMessage(String messageee){
        this.messageee=messageee;
    }

    public void show(){
        System.out.println("message: "+messageee);
    }
}

你在这个程序中看到,我有一个外部声明为private的变量,命名为messageee,下一个变量是使用名为messageee的setter进行参数化的.你看,两者都有相同的名字.

好的..现在看看这个bean文件:

<?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="helloWorld" class="com.springframework.HelloWorld">
        <property name="message" value="Hello.. This is Spring Framework example."></property>
    </bean>

</beans>

在这里你看到内部bean标签.我已将属性名称声明为消息.我不明白,当我将名称作为messageee时,它会给出一个错误:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'helloWorld' defined in class path resource [beans.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'messageee' of bean class [com.springframework.HelloWorld]: Bean property 'messageee' is not writable or has an invalid setter method. Did you mean 'message'?

但是当我把这个名字作为信息时.它运行成功.但我没有任何消息的方法或任何类似名称的变量.那么,setter究竟如何运作?请你详细说明一下吗?

帮助将不胜感激!

解决方法:

您将字段(或实例变量)与属性混淆.

属性是来自Java Beans规范的术语. bean的属性foo是可以使用名为getFoo()的getter方法(或布尔的isFoo())和/或使用名为setFoo()的setter方法设置的数据.

这些方法在内部做什么,无论它们是否获取/设置变量,变量是否也被命名为foo或其他任何变量,都是完全无关紧要的.重要的是getter / setter的名称.

因此,当您定义bean并告诉Spring设置名为message的属性时,Spring将查找名为setMessage()的方法.它不关心bean类的私有字段.

上一篇:如何利用缓存机制实现JAVA类反射性能提升30倍


下一篇:c#-SingleOrNewIdentified(o => o.prop,value),新建时设置o.prop