一、@Autowired自动装配
当我们在IDEA中不使用xml配置文件的时候,这时候我们就需要@Autowired注解,该注解的原理如下:
1.在启动Spring IOC时,容器自动的装配一个AutowiredAnnotationBeanPostProcesspr后置处理器,当容器在扫描中扫描到@Autowired时,就会在IOC容器中自动的查找所需要的Bean对象;
2.在使用@Autowired时,容器首先会查找对应类型的Bean对象,当查询结果是一个的时候,就直接进行装配。当查询到的结果不是唯一的一个时,@Autowired则会根据名称进行查找,当结果为空时,则会抛出异常。
二、使用方法
建立一个三层模式,dao层、service层、controller层如下:

dao层:
public interface IUserDao {
public void save();
}public class UserDaoImp implements IUserDao{
public void save() {
System.out.println("=======dao的新增========");
}
}Service层
public interface IUserService {
public void save();
}@Autowired的使用分为以下几种:
1.用在字段上
@Autowired用在字段上时,表示Spring会对改字段进行匹配赋值,在Spring容器中查找(byType),找到能匹配到该字段的对象,然后进行赋值;如果未找到就出现异常。
public class UserServiceImp implements IUserService{
@Autowired
private IUserDao dao;
public void save() {
System.out.println("=========service的新增========");
dao.save();
}
}2.用在set方法上
@Autowired用在字段上时,会找到改set方法对应的字段,然后其过程与其一致。
public class UserServiceImp implements IUserService{
private IUserDao dao;
//ByNmae/Bytype自动装配
public void setDao(IUserDao dao) {
this.dao = dao;
}
public void save() {
System.out.println("=========service的新增========");
dao.save();
}
}3.用在构造方法上
@Autowired用在构造方法上时,会找到改构造方法对应的所有字段,然后其过程与字段一致。
public class UserServiceImp implements IUserService{
private IUserDao dao;
//autowire="constructor" 按照类型自动装配
public UserServiceImp(IUserDao dao) {
this.dao = dao;
}
public void save() {
System.out.println("=========service的新增========");
dao.save();
}
}controller层
public interface IUserController {
public void save();
}public class UserControllerImp implements IUserController{
private IUserService service;
//ByNmae/Bytype自动装配
public void setService(IUserService service) {
this.service = service;
}
//autowire="constructor" 按照类型自动装配
public UserControllerImp(IUserService service) {
this.service = service;
}
public void save() {
System.out.println("=========controller的新增==========");
service.save();
}
}三、@Autowired 的自动装配分为:byType和 byName
1.byType:当容器内存在一个和指定的属性类型相同的bean时,那么将和这个属性自动的进行装配,当存在多个该类型的bean,将会抛出异常。
2.byName:是根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配,当我们根据byName进行自动装配时,就需要使用到@Qualifier注解来手动指定一个beanid来进行装配。
所以,@Autowired默认使用的是byType类型,但是对于多个实现类的情况下,@Autowired又支持再次通过byName进行识别。
以上是个人对于@Autowired自动装配的理解,希望对大家有所帮助,一起加油呀!