6

嗨,我对春天比较陌生。我正在使用注释。我的怀疑开始了我有一堂课

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

4 回答 4

8

不它不是。

如果您使用,之MyClassB类的注释进行注释@Component,或者组件扫描将为 bean 工厂中的类创建一个 bean。@Service@Repository@Controller

如果您没有使用这些注释中的任何一个,则需要按照您给出的手动创建一个 bean

前任:

@Component
public class MyClassB{
}
于 2013-07-15T06:50:21.363 回答
1

@Autowired注解让您避免在 的 XML 声明中显式声明需要,MyClassB但这MyClassA并不意味着MyClassB bean是自动创建的。如果您根本不想MyClassB出现在 XML 中,则需要执行 acontext:component-scan来查找@Bean(和派生的)注释。(扫描相当昂贵,因此您需要明确要求。)

于 2013-07-15T07:04:49.350 回答
1

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

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

检查包并搜索注解@Controller,等@Service@Repository并制作 bean 本身。

于 2013-07-15T06:51:40.227 回答
1

如果你有 Annotation @Componenton MyClassB,则无需<bean id="classB" class="com.MyClassB"在 applicationContext.xml 中添加。否则,需要。

于 2013-07-15T06:50:14.050 回答