如果我们使用注释,我们需要在xml中指定bean

时间:2017-01-25 06:38:00

标签: java spring

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>

4 个答案:

答案 0 :(得分:2)

不需要在应用程序上下文中声明每个bean。您可以使用组件扫描并提供包含所有bean的基本包。

<context:annotation-config />
    <context:component-scan base-package="com.package" />

并为您要自动装配的每个类使用@Service标记。

答案 1 :(得分:1)

使用包添加组件扫描到XML,并在顶部注释TextEditorSpellChecker @Component

<context:component-scan base-package="com.tutorialspoint" />

然后您不需要在XML文件上定义任何bean。

答案 2 :(得分:1)

要定义托管bean,您可以

  • 以XML格式定义
  • 在bean的类上使用@Component@Service注释,在XML中使用适当的context:component-scan

要使用它,你要么

  • 在XML中声明依赖
  • 使用@Autowired annotation

如果要使用任何注释,则需要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。