戴着假发的程序员出品
[查看视频教程]
当我们通知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
原文:https://www.cnblogs.com/jiafa/p/13769378.html