@Autowired

Spring管理的Bean对象可以采用自动装配机制为属性赋值。基于注解方式进行自动装配,一般使用@Autowired,@Qualifer,@Resource这些注解。
@Autowired修饰构造方法,set方法,属性值


@Autowired_第1张图片

底层完成DI依赖注入操作是通过反射调用set方法,或者构造方法为属性赋值。

  1. @Autowired 可以修饰属性,构造方法,set方法,默认依据类型(属性类型,参数类型)为属性注入值.假如Spring容器中有多个相同类型的值,会参考名字进行匹配查找(属性名,set方法参数名,构造方法参数名),假如名字有相同的则注入,没有相同的会注入失败.
  2. @Qualifier 配合@Autowired注解按名字为属性注入值.
  3. @Resource 可以修饰属性或set方法,默认依据名字(属性名,set方法名)为属性注入值.假如spring容器中有名字相同但类型不同的bean就会注入失败,当没有找到对应名字的bean对象,此时会依据类型再次进行查找,假如相同类型则
    直接注入,当有多个相同类型可能会注入失败(假如是按set方法进行注入,依据方法名字没找到,还会按参数类型查找,对应类型有多个,还可能会按参数名查找,假如没找对应的,则注入失败).

这两个要配合使用

    @Autowired
    @Qualifier("sysLogService")//按名字为属性注入值
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;
/**
 * 
 * 
 *
 */
@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依赖注入是通过反射实现的

你可能感兴趣的:(@Autowired)