2010-01-26 52 views

回答

0

當你的應用服務器啓動時,Spring會爲你做實例化。並且還將「注入」課堂中的對象。

因此,爲了使注入的情況發生,你將不得不寫一個setter方法(這一次的對象實例化Spring將調用)

public class MyClass{ 
    private MyObject myObject; 

    public void setMyObject(MyObject _myObject){ //Spring will call this method 
    this.myObject = _myObject; 
    } 
} 

,或者你可以有一個基於構造器注入

public class MyClass{ 
    private MyObject myObject; 

    public MyClass(MyObject _myObject){ //Spring will call this constructor 
     this.myObject = _myObject 
    } 
} 

編輯: 感謝指出了這一點彼得·d

在您的XML配置文件中,你將不得不這樣做:

<bean name="myObject" class="mypackage.MyObject"/> 

<bean name="myClass" class="mypackage.MyClass"> 
    <property name="myObject" ref="myObject"/> 
</bean> 

希望這會有所幫助!

+0

只要將調用類聲明爲服務或在XML配置中添加該彈簧,就只會自動注入。 – 2010-01-26 19:44:02

+0

你如何聲明它是一個服務?自動裝配? – user255963 2010-01-26 19:55:10

+0

如果您使用@Service註釋註釋您的類並在您的XML中寫入,那麼您將擁有基於註釋的依賴注入。 :) – 2010-01-26 20:00:11

0

依賴注入的神奇之處在於你不需要查找引用,儘管你可以通過編程來實現。另外,你可以定義對象是'singleton'還是原型(每個請求一個實例)。

我希望它可以幫助你

+0

不完全正確。您當然可以在不編寫它的情況下執行所有的DI工作,但是在某些時候,您仍然需要訪問「anotherObject」,並且必須通過對BeanFactory或ApplicationContext的getBean調用進行檢索。 – Robin 2010-01-26 19:56:15

+0

是的......你說得對。我會糾正這一點。 Thxs。 – Aito 2010-01-26 20:03:01

0

您也可以通過獲取應用程序上下文和調用getBean獲取對象:

ApplicationContext appContext = 
    WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); 
return appContext.getBean(beanName); 

您可以通過實現ServletContextAware並創造適當的setter方法讓你的servlet上下文你的代碼。

+1

但我爲什麼要這樣做,它的醜陋?沒有? – user255963 2010-01-26 19:54:43

+0

有時你只會在運行時知道你想要什麼類。因此,通過這段代碼,您可以根據應用程序中的某些內容動態注入一個類。 – 2010-01-26 19:58:41

0

你描述它的方式,它不會工作。 Spring不會修改正常對象的創建方式。爲了利用Spring注入,即去一個Spring bean的引用,您可以:

  • 按名稱獲取從應用程序上下文對象豆
  • 讓Spring完成其工作與@Autowired註釋,或自動自動裝配:)
  • 配置xml明確注射

總而言之,要獲得一個bean,你不能創建它,但要求Spring將它交付給你。