Spring Autowire Fundamentals

时间:2011-07-06 10:25:54

标签: spring

我是春天的新手,我正在尝试理解以下概念。

假设accountDAOAccountService的依赖关系。

情景1:

<bean id="accServiceRef" class="com.service.AccountService">
    <property name="accountDAO " ref="accDAORef"/>
</bean>

<bean id="accDAORef" class="com.dao.AccountDAO"/>

情景2:

<bean id="accServiceRef" class="com.service.AccountService" autowire="byName"/>
<bean id="accDAORef" class="com.dao.AccountDAO"/>

AccountService班级:

public class AccountService {
    AccountDAO accountDAO;
    ....
    ....
}

在第二种情况下,如何注入依赖关系?当我们说它是由Name自动装配时,它究竟是如何完成的。在引入依赖项时匹配哪个名称?

提前致谢!

2 个答案:

答案 0 :(得分:12)

使用@Component和@Autowire,它是Spring 3.0方式

@Component
public class AccountService {
    @Autowired
    private AccountDAO accountDAO;
    /* ... */
}   

在您的应用上下文中放置组件扫描,而不是直接声明bean。

<?xml version="1.0" encoding="UTF-8"?>
<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.xsd
                           http://www.springframework.org/schema/context 
                           http://www.springframework.org/schema/context/spring-context.xsd">

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

</beans>

答案 1 :(得分:2)

<bean id="accServiceRef" class="com.service.accountService" autowire="byName">
</bean>    
<bean id="accDAORef" class="com.dao.accountDAO">
</bean>

public class AccountService {
    AccountDAO accountDAO;
    /* more stuff */
}

当spring在accServiceRef bean中找到autowire属性时,它将扫描AccountService类中的实例变量以获得匹配的名称。如果任何实例变量名与xml文件中的bean名匹配,那么该bean将被注入AccountService类。在这种情况下,找到accountDAO的匹配项。

希望它有意义。