Spring - 如果我们使用注释,我们需要在xml中指定bean吗?如果我们使用注释@aurowired那么是否需要在xml中使用bean id
public class TextEditor {
@Autowired
private SpellChecker spellChecker;
public TextEditor() {
System.out.println("Inside TextEditor constructor." );
}
public SpellChecker getSpellChecker( ){
return spellChecker;
}
public void spellCheck(){
spellChecker.checkSpelling();
}
}
应用程序上下文
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config/>
<!-- Definition for textEditor bean without constructor-arg -->
<bean id="textEditor" class="com.tutorialspoint.TextEditor">
</bean>
<!-- Definition for spellChecker bean -->
<bean id="spellChecker" class="com.tutorialspoint.SpellChecker">
</bean>
</beans>
答案 0 :(得分:2)
不需要在应用程序上下文中声明每个bean。您可以使用组件扫描并提供包含所有bean的基本包。
<context:annotation-config />
<context:component-scan base-package="com.package" />
并为您要自动装配的每个类使用@Service
标记。
答案 1 :(得分:1)
使用包添加组件扫描到XML,并在顶部注释TextEditor
和SpellChecker
@Component
。
<context:component-scan base-package="com.tutorialspoint" />
然后您不需要在XML文件上定义任何bean。
答案 2 :(得分:1)
要定义托管bean,您可以
@Component
或@Service
注释,在XML中使用适当的context:component-scan
要使用它,你要么
如果要使用任何注释,则需要XML中的context:annotation-config
。
如果您想通过该ID引用它,您只需要为bean分配一个ID,无论是XML格式还是自动装配时的@Qualifier
注释。
答案 3 :(得分:1)
@aurowired默认自动连线bean按类型。如果你使用
<bean class="com.tutorialspoint.SpellChecker">
</bean>
这将在spring按类型注入bean时起作用。 但是如果你正在创造2个豆子
<bean id ="spell1" class="com.tutorialspoint.SpellChecker">
</bean>
<bean id ="spell2" class="com.tutorialspoint.SpellChecker">
</bean>
这不起作用,因为有两个相同类型的bean。你必须使用@qualifier。