开发者

Spring Autowire Fundamentals

I am a newbie in Spring and am trying to understand the below concept.

Assume that accountDAO is a dependency of AccountService.

Scenario 1:

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

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

Scenario 2:

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

In AccountService Class:

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

In the second scenario, How is the dependency injected ? When we say it is autowired by Name , how exactly is it being done. Which name is matched while injecing the dependency?

Thanks in advanc开发者_C百科e!


Use @Component and @Autowire, it's the Spring 3.0 way

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

Put a component scan in your app context rather than declare the beans directly.

<?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>


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

and

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

When spring finds the autowire property inside accServiceRef bean, it will scan the instance variables inside the AccountService class for a matching name. If any of the instance variable name matches the bean name in the xml file, that bean will be injected into the AccountService class. In this case, a match is found for accountDAO.

Hope it makes sense.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜