2015-08-14 103 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,因爲有一個叫做那個吸氣劑。