1.25 ref注入引用对象

戴着假发的程序员出品

[查看视频教程]

当我们通知spring帮我们注入某个引用来行的对象时,我们可以使用ref通知spring注入bean的beanName。

案例:

我们有AccountDAO和AccountService类:

 1 /**
 2  * @author 戴着假发的程序员
 3  *  
 4  * @description
 5  */
 6 public class AccountDAO implements IAccountDAO {
 7     @Override
 8     public int save(String name) {
 9         System.out.println("AccountDAO-save:"+name);
10         return 1;
11     }
12 }
 1 /**
 2  * @author 戴着假发的程序员
 3  *  
 4  * @description
 5  */
 6 public class AccountService {
 7     private AccountDAO accountDAO;
 8     public void setAccountDAO(AccountDAO accountDAO) {
 9         this.accountDAO = accountDAO;
10     }
11     // 无参构造
12     public AccountService(){}
13     //有参构造
14     public AccountService(AccountDAO accountDAO) {
15         this.accountDAO = accountDAO;
16     }
17     public int save(String name){
18         System.out.println("AccountService-save:"+name);
19         return accountDAO.save(name);
20     }
21 }

我们可以以下面的方式配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans  default-autowire="byName" xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--dao-->
    <bean id="accountDAO1" class="com.boxuewa.dk.demo2.dao.impl.AccountDAO"/>
    <!-- service方式1-->
    <bean id="accountService1" class="com.boxuewa.dk.demo2.service.AccountService">
        <property name="accountDAO" ref="accountDAO1"/>
    </bean>
    <!-- service方式2-->
    <bean id="accountService1" class="com.boxuewa.dk.demo2.service.AccountService">
        <property name="accountDAO"><ref bean="accountDAO1"/></property>
    </bean>
    <!-- service方式3-->
    <bean id="accountService1" class="com.boxuewa.dk.demo2.service.AccountService">
        <constructor-arg name="accountDAO" ref="accountDAO1"/>
    </bean>
    <!-- service方式4-->
    <bean id="accountService1" class="com.boxuewa.dk.demo2.service.AccountService">
        <constructor-arg name="accountDAO"><ref bean="accountDAO1"/></constructor-arg>
    </bean>
    <!-- service方式5-->
    <bean id="accountService1" class="com.boxuewa.dk.demo2.service.AccountService">
        <property name="accountDAO">
            <bean class="com.boxuewa.dk.demo2.dao.impl.AccountDAO"/>
        </property>
    </bean>
    <!-- service方式6-->
    <bean id="accountService1" class="com.boxuewa.dk.demo2.service.AccountService">
        <constructor-arg name="accountDAO">
           <bean class="com.boxuewa.dk.demo2.dao.impl.AccountDAO"/>
        </constructor-arg>
    </bean>
</beans>

测试:

    @Test
    public void testRef(){
        ApplicationContext ac =
                new ClassPathXmlApplicationContext("applicationContext.xml");
        AccountService bean1 = (AccountService) ac.getBean("accountService1");
        AccountService bean2 = (AccountService) ac.getBean("accountService2");
        AccountService bean3 = (AccountService) ac.getBean("accountService3");
        AccountService bean4 = (AccountService) ac.getBean("accountService4");
        AccountService bean5 = (AccountService) ac.getBean("accountService5");
        AccountService bean6 = (AccountService) ac.getBean("accountService6");
        bean1.save("假发-1");
        bean2.save("假发-2");
        bean3.save("假发-3");
        bean4.save("假发-4");
        bean5.save("假发-5");
        bean6.save("假发-6");
    }

结果:

 1 AccountService-save:假发-1
 2 AccountDAO-save:假发-1
 3 AccountService-save:假发-2
 4 AccountDAO-save:假发-2
 5 AccountService-save:假发-3
 6 AccountDAO-save:假发-3
 7 AccountService-save:假发-4
 8 AccountDAO-save:假发-4
 9 AccountService-save:假发-5
10 AccountDAO-save:假发-5
11 AccountService-save:假发-6
12 AccountDAO-save:假发-6

 

posted @ 2020-10-05 09:47  戴着假发的程序员0-1  阅读(285)  评论(0编辑  收藏  举报