2013-07-15 63 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(和派生)注释。 (扫描相当昂贵,所以你需要明确要求。)