在applicationContext.xml中使用Spring @Autowired和bean声明

时间:2013-07-15 06:45:42

标签: spring

嗨,我对春天比较陌生。我正在使用注释。 我怀疑开始我上课了 如

public class MyClassA{

@Autowired
private MyClassB variableClassB;

// more code here
.
.
.

在我的applicationContext.xml

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

我的问题是我需要在applicationContext.xml中添加bean声明,如下所示

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

或是否足以拥有@Autowired注释

4 个答案:

答案 0 :(得分:7)

不,不是。

如果您的MyClassB注释了@Component@Service@Repository@Controller等注释,则组件扫描将为该类创建一个bean豆制品厂。

如果您之前没有使用任何这些注释,则需要手动创建bean

例如:

@Component
public class MyClassB{
}

答案 1 :(得分:1)

如果@Component上有注释MyClassB,则无需在applicationContext.xml中添加<bean id="classB" class="com.MyClassB"。否则,需要。

答案 2 :(得分:1)

@Autowired注释的全部目的只是为了避免在xml文件中明确提到bean。做

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

检查包并搜索注释@Controller@Service@Repository等,并自行创建bean。

答案 3 :(得分:1)

使用@Autowired注释可以避免在MyClassB的XML声明中明确说明MyClassA的必要性,但这并不意味着MyClassB bean 是自动创建的。如果您不希望在XML中出现MyClassB,则需要执行context:component-scan来查找@Bean(和派生)注释。 (扫描费用相当昂贵,因此您需要明确要求。)