Spring DI依賴注入Autowired,Qualifer,Resource

Spring管理的Bean對象可以採用自動裝配機制爲屬性賦值。基於註解方式進行自動裝配,一般使用@Autowired,@Qualifer,@Resource這些註解。
@Autowired修飾構造方法,set方法,屬性值

底層完成DI依賴注入操作是通過反射調用set方法,或者構造方法爲屬性賦值。

  1. @Autowired 可以修飾屬性,構造方法,set方法,默認依據類型(屬性類型,參數類型)爲屬性注入值.假如Spring容器中有多個相同類型的值,會參考名字進行匹配查找(屬性名,set方法參數名,構造方法參數名),假如名字有相同的則注入,沒有相同的會注入失敗.
  2. @Qualifier 配合@Autowired註解按名字爲屬性注入值.
  3. @Resource 可以修飾屬性或set方法,默認依據名字(屬性名,set方法名)爲屬性注入值.假如spring容器中有名字相同但類型不同的bean就會注入失敗,當沒有找到對應名字的bean對象,此時會依據類型再次進行查找,假如相同類型則
    直接注入,當有多個相同類型可能會注入失敗(假如是按set方法進行注入,依據方法名字沒找到,還會按參數類型查找,對應類型有多個,還可能會按參數名查找,假如沒找對應的,則注入失敗).

這兩個要配合使用 

package controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;

import service.SysLogService;
@Controller
public class SysLogController {
    @Autowired
    @Qualifier("sysLogService")
    private SysLogService sysLogService;

    public SysLogService getSysLogService() {
        return sysLogService;
    }

}
package service;

public interface SysLogService {

}
package service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import dao.SysLogDao;
import service.SysLogService;
/**
 * <bean id="sysLogService" class="service.impl.SysLogServiceImpl">
 * <property name="SysLogDao" ref="SysLogDaoImpl">
 *</bean>
 */
@Service("sysLogService") //描述業務層對象,自己起的名字
//@Service //描述業務層對象
public class SysLogServiceImpl implements SysLogService {
    //@Autowired
    private SysLogDao sysLogDao;
    
    public SysLogDao getSysLogDao() {
        return sysLogDao;
    }
    @Autowired
    public void setSysLogDao(SysLogDao sysLogDao) {
        this.sysLogDao = sysLogDao;
    }
}
package dao;

public interface SysLogDao {

}

 

package dao.impl;

import org.springframework.stereotype.Repository;

import dao.SysLogDao;
@Repository //這個註解修飾Dao層的對象
public class SysLogDaoImpl implements SysLogDao{

}

DI依賴注入是通過反射實現的

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章