Spring 依賴注入(基本注入和自動適配注入)

Spring 依賴注入

Spring框架的核心功能之一就是經過依賴注入的方式來管理Bean之間的依賴關係。spring

 

一、屬性注入

IService:框架

1 public interface IUserService {
2     /*
3      * 說話
4      */
5     void Say(String msg);
6 }
View Code

ServiceImpyii

 1 public class UserServiceImpl implements IUserService {
 2 
 3     private IUserDao iUserDao;
 4     
 5     public void setUserDao(IUserDao dao) {
 6         this.iUserDao=dao;
 7     }
 8     
 9     /*
10      * 說話
11      */
12     public void Say(String msg) {
13         this.iUserDao.Say(msg);
14     }
15 }
View Code

IDaoide

1 public interface IUserDao {    
2      /*
3       * 說話
4       */
5      void Say(String msg);    
6  }
View Code

DaoImp函數

1 public class UserDaoImpl implements IUserDao {
2     /*
3      * 說話
4      */
5     public void Say(String msg) {
6         System.out.println(msg);
7     }
8 }
View Code

Bean:測試

 1 <beans xmlns="http://www.springframework.org/schema/beans"
 2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xsi:schemaLocation="http://www.springframework.org/schema/beans
 4     http://www.springframework.org/schema/beans/spring-beans.xsd">     
 5      
 6      <bean id="userServerId" class="serviceImpl.UserServiceImpl">
 7          <!-- 此處是set屬性注入,name值必須和UserServiceImpl中屬性名一致 -->
 8          <property name="userDao" ref="userDaoId"></property>
 9      </bean>     
10 </beans>
View Code

測試輸出:this

1 public class MainShow {
2     public static void main(String[] args) {
3         System.out.println("開始執行。。。");
4         
5         ApplicationContext context=new ClassPathXmlApplicationContext("resources/beans.xml");
6         IUserService idog=(IUserService)context.getBean("userServerId");
7         idog.Say("汪汪汪。。。");
8     }
9 }
View Code

二、構造注入

IService:spa

1 public interface IDogService {
2      /*
3       * 叫
4       */
5      void Call(String msg);
6  }
View Code

ServiceImp:3d

 1 public class DogServiceImpl implements IDogService {
 2 
 3     private IDogDao idogdao;
 4     
 5     public DogServiceImpl(DogDaoImpl dogDao) {
 6         System.out.println("開始構造注入.....");
 7         this.idogdao=dogDao;
 8     }
 9 
10     /*
11      * 叫聲
12      */
13     public void Call(String msg) {
14         idogdao.Call(msg);
15     }
16 }
View Code

IDao:code

1 public interface IDogDao {
2      /*
3       * 叫
4       */
5      void Call(String msg);
6  }
View Code

DaoImp:

1 public class DogDaoImpl implements IDogDao {
2     
3     public void Call(String msg) {
4         System.out.println("汪汪汪:"+msg);
5     }
6 }
View Code

Bean:

 1 <beans xmlns="http://www.springframework.org/schema/beans"
 2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xsi:schemaLocation="http://www.springframework.org/schema/beans
 4     http://www.springframework.org/schema/beans/spring-beans.xsd">
 5          
 6     <!-- 構造注入 -->
 7     <bean id="dogId" class="serviceImpl.DogServiceImpl">
 8         <constructor-arg ref="dogDao"/>
 9     </bean>
10     
11     <bean id="dogDao" class="daoImpl.DogDaoImpl"></bean>    
12 </beans>
View Code

三、內部注入

 

IService:

1 public interface ICarService {
2     /*
3      * 汽車啓動
4      */
5     void Start();
6 }
View Code

ServiceImp: 

 1     private ICarDao idao;
 2 
 3     public void setIdao(CarDaoImpl impl) {
 4         this.idao = impl;
 5     }
 6     
 7     public void Start() {
 8         idao.Start();
 9     }    
10 }
View Code

IDao:

1 public interface ICarDao {
2     /*
3      * 汽車啓動
4      */
5     void Start();
6 }
View Code

DaoImp: 

1 public class CarDaoImpl implements ICarDao {    
2     
3     public void Start() {
4         System.out.println("汽車開始啓動。。。。。。");
5     }
6 }
View Code

Bean:

 1 <beans xmlns="http://www.springframework.org/schema/beans"
 2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xsi:schemaLocation="http://www.springframework.org/schema/beans
 4     http://www.springframework.org/schema/beans/spring-beans.xsd">
 5 
 6     <!-- 內部注入 -->
 7     <bean id="carId" class="serviceImpl.CarServiceImpl">
 8         <property name="idao">
 9             <bean class="daoImpl.CarDaoImpl"></bean>
10         </property>
11     </bean>    
12 </beans> 
View Code

四、自動裝配

在Spring框架,能夠用  auto-wiring 功能會自動裝配Bean。要啓用它,只須要在  <bean> 定義「 autowire」屬性。
<beans/>  標籤能夠定義 default-autowire-candidate="false" 屬性讓它和它包含的全部 bean 都不作爲候選bean。
1 <bean id="customer" class="com.yiibai.common.Customer" autowire="byName" />
在Spring中,支持 5 自動裝配模式。
  • no – 缺省狀況下,自動配置是經過「ref」屬性手動設定
  • byName – 根據屬性名稱自動裝配。若是一個bean的名稱和其餘bean屬性的名稱是同樣的,將會自裝配它。
  • byType – 按數據類型自動裝配。若是一個bean的數據類型是用其它bean屬性的數據類型,兼容並自動裝配它。
  • constructor – 在構造函數參數的byType方式。
  • autodetect – 若是找到默認的構造函數,使用「自動裝配用構造」; 不然,使用「按類型自動裝配」。

ServiceImp: 

 1 public class UserServiceImpl implements IUserService {
 2 
 3     private IUserDao userDao;
 4     
 5     public void setUserDao(UserDaoImpl dao) {
 6         this.userDao=dao;
 7     }
 8     
 9     /*
10      * 說話
11      */
12     public void Say(String msg) {
13         this.userDao.Say(msg);
14     }
15 }
View Code

IDao:

1 public interface IUserDao {    
2     /*
3      * 說話
4      */
5     void Say(String msg);    
6 }
View Code

DaoImp: 

1 public class UserDaoImpl implements IUserDao {
2     /*
3      * 說話
4      */
5     public void Say(String msg) {
6         System.out.println(msg);
7     }
8 }
View Code

一般狀況下,進行明確的裝配目標 Bean

 1 <beans xmlns="http://www.springframework.org/schema/beans"
 2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xsi:schemaLocation="http://www.springframework.org/schema/beans
 4     http://www.springframework.org/schema/beans/spring-beans.xsd">
 5      
 6      
 7      <bean id="userServerId" class="serviceImpl.UserServiceImpl">
 8          <!-- 此處是set屬性注入,name值必須和UserServiceImpl中屬性名一致 -->
 9          <property name="userDao" ref="userDaoId"></property>
10      </bean>
11      
12      <bean id="userDaoId" class="daoImpl.UserDaoImpl"></bean>
13 </beans> 
View Code

一、由類型 (Type) 自動裝配:

1 <beans xmlns="http://www.springframework.org/schema/beans"
2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3     xsi:schemaLocation="http://www.springframework.org/schema/beans
4     http://www.springframework.org/schema/beans/spring-beans.xsd">
5 
6     <!-- Type自動裝配注入 -->
7     <bean id="userServerId" class="serviceImpl.UserServiceImpl" autowire="byType"/>
8     <bean id="userDaoId" class="daoImpl.UserDaoImpl"></bean>     
9 </beans>

二、由類型 (Name) 自動裝配:

1 <beans xmlns="http://www.springframework.org/schema/beans"
2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3     xsi:schemaLocation="http://www.springframework.org/schema/beans
4     http://www.springframework.org/schema/beans/spring-beans.xsd">
5 
6     <!-- Name 自動裝配注入 -->
7     <bean id="userServerId" class="serviceImpl.UserServiceImpl" autowire="byName"/>
8     <bean id="userDao" class="daoImpl.UserDaoImpl"></bean>     
9 </beans> 

三、構造函數自動裝配:

ServiceImp: 

 1 public class DogServiceImpl implements IDogService {
 2 
 3     private IDogDao idogdao;
 4     
 5     public DogServiceImpl(DogDaoImpl dogDao) {
 6         System.out.println("開始構造注入.....");
 7         this.idogdao=dogDao;
 8     }
 9 
10     /*
11      * 叫聲
12      */
13     public void Call(String msg) {
14         idogdao.Call(msg);
15     }
16 }
View Code

IDao:

1 public interface IDogDao {
2     /*
3      * 叫
4      */
5     void Call(String msg);
6 }
View Code

DaoImp: 

1 public class DogDaoImpl implements IDogDao {
2     
3     public void Call(String msg) {
4         System.out.println("狗叫:"+msg);
5     }
6 }
View Code

一般狀況下,使用構造注入Bean,配置以下:

 1 <beans xmlns="http://www.springframework.org/schema/beans"
 2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xsi:schemaLocation="http://www.springframework.org/schema/beans
 4     http://www.springframework.org/schema/beans/spring-beans.xsd">
 5 
 6     <!-- 構造注入 -->
 7     <bean id="dogId" class="serviceImpl.DogServiceImpl">
 8         <constructor-arg ref="dogDao"/>
 9     </bean>    
10     <bean id="dogDao" class="daoImpl.DogDaoImpl"></bean>    
11 </beans> 

自動裝配用構造函數啓用後,你能夠不設置構造器屬性。Spring會找到兼容的數據類型,並自動裝配它。

<beans 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">

     <!-- Constructor  構造自動裝配 -->
     <bean id="dogId" class="serviceImpl.DogServiceImpl" autowire="constructor"/>
     <!-- 有無Id均可以 -->    
    <bean id="dogDaos" class="daoImpl.DogDaoImpl"></bean>     
</beans> 
相關文章
相關標籤/搜索