7

我可以放入context:annotation-config我的 XML 配置并且它会自动注入 bean 类而不需要任何注释是否正确?

因此,不要使用这些注释类型:

public class Mailman
{
    private String name;

    @Autowired
    private Parcel Parcel;

    public Mailman(String name)
    {
        this.name = name;
    }

    @Autowired
    public void setParcel(Parcel Parcel)
    {
        this.Parcel = Parcel;
    }

    @Autowired
    public void directionsToParcel(Parcel Parcel)
    {
        this.Parcel = Parcel;
    }

}

我只需要这样写:

<beans ... >
<bean id="mailMan" class="MailMan">
 <constructor-arg value="John Doe"/>
</bean>
<bean id="parcel" class="Parcel" />
<context:annotation-config />
</beans>

然后我的 MailMan 类看起来会简单得多,不需要注释:

public class Mailman
{
    private String name;

    private Parcel Parcel;

    public Mailman(String name)
    {
        this.name = name;
    }    
}
4

3 回答 3

7

默认情况下,Spring 上下文不会关注@Autowired注解。为了处理它们,上下文需要在AutowiredAnnotationBeanPostProcessor上下文中注册一个 bean。

<context:annotation-config/>为您注册其中一个(以及其他几个),因此您确实需要它(除非您AutowiredAnnotationBeanPostProcessor自己注册,这是完全有效的)。

如果您不喜欢@Autowired在您的代码中添加,那么您可以使用 显式地在 XML 中注入属性,<property>这只会将混乱从一个地方移到另一个地方。

如果您的上下文非常简单,那么您可以使用隐式自动装配,如此所述。本质上,这告诉 Spring 通过属性名称或类型自动自动装配。这需要很少的配置,但它很快就会失控 - 它的自动性质意味着它很难控制,并且给你的灵活性很小。

@Autowired一般来说,确实是最好的选择。

于 2010-06-06T19:54:44.647 回答
1

<context:annotation-config />只需自动注册 Spring 提供的所有标准 bean 后处理器,如、PersistenceAnnotationBeanPostProcessor和,这样您就不必在 spring 上下文文件中单独注册它们。您仍然必须像之前一样在属性/设置器上提供注释。AutowiredAnnotationBeanPostProcessorCommonAnnotationBeanPostProcessorRequiredAnnotationBeanPostProcessor@Autowired

于 2010-06-06T17:36:29.990 回答
0

不。

@Autowired课堂上需要注释以及 <context:annotation-config/>

使用注释时不需要 xml 配置部分。

同样来自文档注意,它<context:annotation-config/>仅在定义它的同一应用程序上下文中查找 bean 上的注释。这意味着,如果您为 DispatcherServlet 放入 WebApplicationContext,它只会检查控制器中的 @Autowired bean,而不是您的服务。

如果您不需要使用注解,那么您需要指定 xml 配置。

于 2010-06-06T17:42:06.810 回答