Java 弹簧自动接线行为

Java 弹簧自动接线行为,java,spring,Java,Spring,我有下一个简单的applicationclass消息,它只有一个方法可以打印传入消息,并且对这个问题不感兴趣: package messager.spring; public class User { private Messenger misiger; private String name; public User(String name) { this.name = name; } public void setMessenge

我有下一个简单的applicationclass消息,它只有一个方法可以打印传入消息,并且对这个问题不感兴趣:

package messager.spring;

public class User {
    private Messenger misiger;
    private String name;

    public User(String name) {
        this.name = name;
    }

    public void setMessenger(Messenger messinger) {
        this.misiger = messinger;
    }

    public void send(String mess) {
        String message = name + " sent message " + "'" + mess + "'";
        misiger.send(message);
    }

//  public String getname() {
//      return name;
//  }
}
主要类别:

Spring配置文件:

我对类用户自动布线Messanger类使用了自动布线。根据文件:

当使用ByName时,它会尝试将其属性与配置文件中由相同名称定义的bean进行匹配和关联。如果找到匹配项,它将注入这些bean,否则将抛出异常


这个配置可以工作,但我不明白为什么在用户类中没有名为messenger的属性,我故意将其更改为misiger。它仍然有效。看起来bean id并不是直接依赖于属性名,而是依赖于setter名!!!是这样吗?

通过查看命名约定,JavaBeans就是这样工作的

基础引用不一定相关


您的属性名为messenger,因为有一个getter叫做它。

通过查看命名约定,JavaBeans就是这样工作的

基础引用不一定相关


您的属性名为messenger,因为有一个名为messenger的getter。

是的,您是对的。如上所述:

Spring将把方法名中“set”之后的第一个字母小写,并按原样使用方法名的其余部分来推导属性名


因此,不是成员变量,而是setter定义属性名

是的,你是对的。如上所述:

Spring将把方法名中“set”之后的第一个字母小写,并按原样使用方法名的其余部分来推导属性名


因此,不是成员变量,而是setter定义属性名

简单地说,更改setter name和id=misiger并查看它是否失败,若失败,那个么spring是通过setter方法完成的。我认为它确实使用了setter,或者完全删除了setter方法。我认为它确实使用了setter,或者完全删除了setter方法。
package messager.spring;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
    public static void main(String[] args) {
          ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

          User user = (User) context.getBean("user");

          user.send("testing3...");
       }
}
<?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-2.5.xsd">

    <bean id="user" class="messager.spring.User" autowire="byName">
        <constructor-arg type="java.lang.String" value="Vova2"/>
   </bean>

   <bean id="messenger" class="messager.spring.MobileMessenger"/>
</beans>