2013-07-15 66 views
4

嗨我對Spring比較陌生。我正在使用註釋。 我開始懷疑我在applicationContext.xml中有一類 作爲spring @Autowired和applicationContext.xml中的bean聲明

public class MyClassA{ 

@Autowired 
private MyClassB variableClassB; 

// more code here 
. 
. 
. 

<context:component-scan base-package="package containing MyClassB" /> 

我的問題的存在,我需要加入applicationContext.xml中的bean聲明如下

<bean id="classB" class="com.MyClassB" 

還是隻有@Autowired標註

回答

6

不,它不是。

如果MyClassB與註解,像@Component@Service@Repository@Controller組件掃描將創建在bean工廠類的bean。

如果你不使用任何這些註釋的話,你需要手動創建一個bean,你給

例:

@Component 
public class MyClassB{ 
} 
+0

不,我沒有任何這些註釋。它只是一個POJO課程。所以我想我需要在applicationContext.xml中定義一個bean。對? – Aditya

+0

@Aditya是的,你需要 –

+0

謝謝Arun ... :) – Aditya

1

如果您在MyClassB上有註釋@Component,則無需在applicationContext.xml中添加<bean id="classB" class="com.MyClassB"。否則,需要。

1

@Autowired註釋的全部目的就是爲了避免明確提及xml文件中的bean。這樣做

<context:component-scan base-package="package containing MyClassB" />

檢查包裝和搜索註釋@Controller@Service@Repository等,並使得豆本身。

+0

不,我沒有任何這些註釋。它只是一個POJO課程。 所以我想我需要在applicationContext.xml中定義一個bean? – Aditya

1

@Autowired註解讓你避免必須明確說明用於在MyClassA XML聲明MyClassB的需求,但它並不意味着MyClassB自動創建。如果您不希望MyClassB出現在XML中,則需要執行context:component-scan以查找@Bean(和派生)註釋。 (掃描相當昂貴,所以你需要明確要求。)