一旦你在xml文件中連接了bean,如何實例化對象?在xml中設置bean之後,如何實例化對象?
,是不是就是:
Myobject myObject = new MyObject();
和春天在幕後將執行基於類型的查詢?
或者您是否必須使用applicationContext?
一旦你在xml文件中連接了bean,如何實例化對象?在xml中設置bean之後,如何實例化對象?
,是不是就是:
Myobject myObject = new MyObject();
和春天在幕後將執行基於類型的查詢?
或者您是否必須使用applicationContext?
當你的應用服務器啓動時,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>
希望這會有所幫助!
您也可以通過獲取應用程序上下文和調用getBean獲取對象:
ApplicationContext appContext =
WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
return appContext.getBean(beanName);
您可以通過實現ServletContextAware
並創造適當的setter方法讓你的servlet上下文你的代碼。
但我爲什麼要這樣做,它的醜陋?沒有? – user255963 2010-01-26 19:54:43
有時你只會在運行時知道你想要什麼類。因此,通過這段代碼,您可以根據應用程序中的某些內容動態注入一個類。 – 2010-01-26 19:58:41
我相信這是你在找什麼 - >http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-client
本質上,它歸結爲getBean()
方法:
MyObject obj = (MyObject) ctx.getBean("myObject");
當然,在網絡方面,或在其他一些環境中,你可能會從別處獲取ctx(spring上下文),因此您不需要手動創建它。
你描述它的方式,它不會工作。 Spring不會修改正常對象的創建方式。爲了利用Spring注入,即去一個Spring bean的引用,您可以:
總而言之,要獲得一個bean,你不能創建它,但要求Spring將它交付給你。
只要將調用類聲明爲服務或在XML配置中添加該彈簧,就只會自動注入。 – 2010-01-26 19:44:02
你如何聲明它是一個服務?自動裝配? – user255963 2010-01-26 19:55:10
如果您使用@Service註釋註釋您的類並在您的XML中寫入 ,那麼您將擁有基於註釋的依賴注入。 :) –
2010-01-26 20:00:11