我可以将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;
}
}
答案 0 :(得分:6)
默认情况下,Spring上下文不会关注@Autowired
注释。为了处理它们,上下文需要在上下文中注册AutowiredAnnotationBeanPostProcessor
bean。
<context:annotation-config/>
为你注册其中一个(以及其他一些),所以你确实需要它(除非你自己注册AutowiredAnnotationBeanPostProcessor
,这是完全有效的。)
如果您不喜欢在代码中使用@Autowired
,那么您可以使用<property>
在XML中显式地注入属性,这只会将混乱从一个地方移动到另一个地方。
如果您的上下文非常简单,那么您可以使用隐式自动装配,如here所述。从本质上讲,这告诉Spring按属性名称或类型自动自动装配。这需要非常少的配置,但它很快失控 - 它的自动性意味着它很难控制,并且给你很小的灵活性。
@Autowired
一般来说是最好的选择。
答案 1 :(得分:1)
<context:annotation-config />
只是自动注册Spring提供的所有标准bean后处理器,如PersistenceAnnotationBeanPostProcessor
,AutowiredAnnotationBeanPostProcessor
,CommonAnnotationBeanPostProcessor
和RequiredAnnotationBeanPostProcessor
,这样你就不会不必在弹簧上下文文件中单独注册它们。您仍然需要在属性/设置器上提供@Autowired
注释。
答案 2 :(得分:0)
没有
@Autowired
该课程需要注释以及<context:annotation-config/>
使用注释时不需要xml配置部分。
同样来自doc注意<context:annotation-config/>
仅查找在其定义的相同应用程序上下文中的bean上的注释。这意味着,如果您为DispatcherServlet放入WebApplicationContext,它只会检查@Autowired控制器中的bean,而不是您的服务。
如果您不需要使用注释,则需要指定xml配置。