戴着假发的程序员 出品
spring应用手册(第一部分)
当我们通知spring帮我们注入某个引用来行的对象时,我们可以使用ref通知spring注入bean的beanName。案例:
我们有AccountDAO和AccountService类:
/** * @author 戴着假发的程序员 * * @description */ public class AccountDAO implements IAccountDAO { @Override public int save(String name) { System.out.println("AccountDAO-save:"+name); return 1; } } /** * @author 戴着假发的程序员 * * @description */ public class AccountService { private AccountDAO accountDAO; public void setAccountDAO(AccountDAO accountDAO) { this.accountDAO = accountDAO; } // 无参构造 public AccountService(){} //有参构造 public AccountService(AccountDAO accountDAO) { this.accountDAO = accountDAO; } public int save(String name){ System.out.println("AccountService-save:"+name); return accountDAO.save(name); } }我们可以以下面的方式配置:
<?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"); }结果:
AccountService-save:假发-1 AccountDAO-save:假发-1 AccountService-save:假发-2 AccountDAO-save:假发-2 AccountService-save:假发-3 AccountDAO-save:假发-3 AccountService-save:假发-4 AccountDAO-save:假发-4 AccountService-save:假发-5 AccountDAO-save:假发-5 AccountService-save:假发-6 AccountDAO-save:假发-6