@Autowired Spring 3中的注释行为

时间:2011-11-17 08:53:25

标签: spring java-ee annotations

我想了解@Autowired注释是如何工作的。

import com.test.WorkFlowDAO;

public class ServiceCentralBOImpl implements IServiceCentralBO
{
    /**
     * Logger for logging functionality.
     */
    private static final Log log = LogFactory.getLog(ServiceCentralBOImpl.class);

    @Autowired
    private WorkFlowDAO workFlowDAO;
    .
    .
    .
}

并在我的Spring applicationContext.xml文件中声明bean:

<bean id="workflowDAO" class="com.test.WorkFlowDAO">
</bean>

仔细观察后,您可以看到Java类中的两个ID和上下文XML文件是不同的。

workFlowDAO

workflowDAO

[字母'f'在两个ID中不同]

由于我的应用程序即使使用此配置也运行良好;我想知道, @Autowired注释如何工作,以便在bean ID不完全匹配时不会抱怨。

如果使用简单的bean; Spring会抱怨bean名称不匹配。

我在Websphere App Server 7.0上运行带有Spring 3.0.5的J2EE应用程序

如果需要更多信息,请与我们联系。

2 个答案:

答案 0 :(得分:6)

@Autowired按类型匹配bean。不考虑该ID。

如果在XML配置中声明了另一个相同类型的bean,Spring会抱怨无法确定正确的bean。

如果您想将ID与@Autowired一起使用,可以使用@Qualifier来实现,但在这种情况下建议使用@Resource

查找有关该主题的更多信息here

答案 1 :(得分:1)

完全同意第一条评论。

如果您希望通过名称自动装配bean,可以考虑使用@Qualifier(“givenName”)。

查看所有详细信息:

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html