2012-09-21 48 views
3

因此,出於某種原因,我們項目的一半bean標記爲@Component,並使用@Autowired標註注入標記爲@Component的其他對象,而另一半則使用applicationContext.xml bean顯式連接聲明和屬性與ref bean值。顯式注入一個標記爲@Component的bean

問題是,在那些xml bean聲明中,我可以注入一個標記爲@Component的對象嗎?如果是這樣,它的bean引用名稱是什麼?

例如;

有些類是這樣註釋的;

@Component 
public class BeanAImpl{ ... } 

然後在applicationContext.xml中,其他類顯式連線,因爲它們沒有註釋;

<bean id="beanB" class="com.myapp.BeanBImpl"></bean> 

我可以在applicationContext.xml中注入'種類'的bean嗎?

<bean id="beanUser" class="com.myapp.BeanUserImpl"> 
    <property name="beanA">HOW_TO_GET_REF_TO_BEANA?</property> 
    <property name="beanB"><ref bean="beanB"/></property> 
</bean> 

回答

2

BeanAImpl類型@Component默認名是beanAImpl,你可以用它在XML作爲您手動聲明豆做(也注意到,<property>允許更短的語法):

<property name="beanA" ref = "beanAImpl" /> 

或者,您可以明確地將名稱設置爲@Component("beanA")

1

這裏是春說什麼:

當組件被自動檢測作爲掃描過程的一部分,它的bean名稱將被稱爲該掃描儀BeanNameGenerator戰略產生。 如果你不想依賴默認的bean命名策略,你可以提供一個自定義的bean命名策略。首先,實現BeanNameGenerator接口,並確保包含默認的無參數構造函數。然後在配置掃描器時提供全限定類名:

<context:component-scan base-package="org.example" 
         name-generator="org.example.MyNameGenerator" /> 

的deafault實施只是類名稱以loer情況。

相關問題