上下文:annotation-config是@AutoWired的替代品吗?

Ant*_*cid 6 java spring annotations autowired

我可以放入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;
    }

}
Run Code Online (Sandbox Code Playgroud)

我只想写这个:

<beans ... >
<bean id="mailMan" class="MailMan">
 <constructor-arg value="John Doe"/>
</bean>
<bean id="parcel" class="Parcel" />
<context:annotation-config />
</beans>
Run Code Online (Sandbox Code Playgroud)

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

public class Mailman
{
    private String name;

    private Parcel Parcel;

    public Mailman(String name)
    {
        this.name = name;
    }    
}
Run Code Online (Sandbox Code Playgroud)

ska*_*man 6

默认情况下,Spring上下文不会注意@Autowired注释.为了处理它们,上下文需要AutowiredAnnotationBeanPostProcessor在上下文中注册bean.

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

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

如果你的环境是非常简单的,那么你可以使用隐自动装配,如所描述这里.从本质上讲,这告诉Spring按属性名称或类型自动自动装配.这需要非常少的配置,但它很快失控 - 它的自动性意味着它很难控制,并且给你很小的灵活性.

@Autowired 一般来说,真的是最好的选择.