2015-08-14 105 views
1

我有下一个简单的应用程序(类消息具有打印传入消息,并且具有用于所述问题没有兴趣只有一个方法):弹簧的自动装配行为

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; 
// } 
} 

主类:

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> 

我用自动装配的类用户自动装配Messanger类。根据文档:

当使用绰号,它然后尝试匹配和与由所述配置文件中的相同名称定义的豆连线其属性。如果找到匹配,它会注入那些bean,否则它会抛出异常。

这种配置的作品,但我不明白为什么(((我没有内部用户类名信使财产(((我改变了它的目的misiger,而且它仍然有效,似乎该bean ID不直接取决于属性的名称,但在制定者的名字!这样呢?

+0

容易,更改setter名称和ID =“misiger”,看看它是否失败,如果是的话,那么春天是通过setter方法来做的。我认为它确实使用了setter,或者完全移除了setter方法。 – Elbek

回答

3

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

Spring会后小写的第一个字母“设置”中的方法名称和使用方法名的其余部分,是推断属性名称。

所以不是成员变量二传手定义属性名称。

1

这是JavaBeans的是如何工作的,通过观察命名约定。

相关参考不一定相关。

您的财产名称messenger,因为有一个叫做那个吸气剂。