Spring註入 重點還是看實例吧 實例: 有一個InjectionDao的介面,然後InjectionDaoImpl實現了InjectionDao介面,相當於完成了資料庫的操作。 有一個InjectonServer的介面,然後InjectonServerImpl實現了InjectonServer接 ...
Spring註入
重點還是看實例吧
實例:
有一個InjectionDao的介面,然後InjectionDaoImpl實現了InjectionDao介面,相當於完成了資料庫的操作。
有一個InjectonServer的介面,然後InjectonServerImpl實現了InjectonServer介面,這是服務層的操作。
下麵是設值註入和構造註入:
我們需要在service層完成邏輯操作,所以service層肯定需要調用dao層來完成資料庫的操作。
所以service層肯定有dao層的對象,而我們說的設值註入,構造註入,就是對這個對象而言的。
在類中給對象賦值的方式有兩種,一種是set方式,一種是構造函數,就對應我們這裡所說的設值註入和構造註入。
所以在service層的時候我們有dao對象的set方法和構造函數。
但是,這個set方法的調用(設值註入)和構造函數的調用(構造註入)卻是通過配置文件來完成的。
這個配置文件相當於IOC容器的功能,所以運行實例的時候,要先引入容器,也就是先引入XML文件。
其實,設值註入和構造註入就是XML文件(IOC容器)完成了成員賦值(調用set函數或者構造器)的過程。
IOC方式我們用的對象不是我們自己創建的,也是IOC容器給我們的,我們通過getBean的方式申請對象,如下:
代碼:
spring-injection.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 http://www.springframework.org/schema/beans/spring-beans.xsd" > 6 7 <!-- <bean id="injectionService" class="com.imooc.ioc.injection.service.InjectionServiceImpl"> --> 8 <!-- <property name="injectionDAO" ref="injectionDAO"></property> --> 9 <!-- </bean> --> 10 11 <bean id="injectionService" class="com.imooc.ioc.injection.service.InjectionServiceImpl"> 12 <constructor-arg name="injectionDAO" ref="injectionDAO"></constructor-arg> 13 </bean> 14 15 <bean id="injectionDAO" class="com.imooc.ioc.injection.dao.InjectionDAOImpl"></bean> 16 17 </beans>
InjectionDAO.java
1 package com.imooc.ioc.injection.dao; 2 3 public interface InjectionDAO { 4 5 public void save(String arg); 6 7 }
InjectionDAOImpl.java
1 package com.imooc.ioc.injection.dao; 2 3 public class InjectionDAOImpl implements InjectionDAO { 4 5 public void save(String arg) { 6 //模擬資料庫保存操作 7 System.out.println("保存數據:" + arg); 8 } 9 10 }
InjectionService.java
1 package com.imooc.ioc.injection.service; 2 3 public interface InjectionService { 4 5 public void save(String arg); 6 7 }
InjectionServiceImpl.java
1 package com.imooc.ioc.injection.service; 2 3 import com.imooc.ioc.injection.dao.InjectionDAO; 4 5 6 public class InjectionServiceImpl implements InjectionService { 7 8 private InjectionDAO injectionDAO; 9 10 //構造器註入 11 public InjectionServiceImpl(InjectionDAO injectionDAO1) { 12 this.injectionDAO = injectionDAO1; 13 } 14 15 //設值註入 16 public void setInjectionDAO(InjectionDAO injectionDAO) { 17 this.injectionDAO = injectionDAO; 18 } 19 20 public void save(String arg) { 21 //模擬業務操作 22 System.out.println("Service接收參數:" + arg); 23 arg = arg + ":" + this.hashCode(); 24 injectionDAO.save(arg); 25 } 26 27 }
TestInjection.java
1 package com.imooc.test.ioc.interfaces; 2 3 import org.junit.Test; 4 import org.junit.runner.RunWith; 5 import org.junit.runners.BlockJUnit4ClassRunner; 6 7 import com.imooc.ioc.injection.service.InjectionService; 8 import com.imooc.test.base.UnitTestBase; 9 10 @RunWith(BlockJUnit4ClassRunner.class) 11 public class TestInjection extends UnitTestBase { 12 13 public TestInjection() { 14 super("classpath:spring-injection.xml"); 15 } 16 17 @Test 18 public void testSetter() { 19 InjectionService service = super.getBean("injectionService"); 20 service.save("這是要保存的數據"); 21 } 22 23 @Test 24 public void testCons() { 25 InjectionService service = super.getBean("injectionService"); 26 service.save("這是要保存的數據"); 27 } 28 29 }