@Autowired 是如何工作的
跳到导航
跳到搜索
@Autowired 表示某个属性是否需要进行依赖注入,可以写在属性和方法上。
注解中的 required 属性默认为 true,表示如果没有对象可以注入给属性则抛异常。
@Service
public class OrderService {
@Autowired
private UserService userService;
}
@Autowired 加在某个属性上,Spring 在进行 Bean 的生命周期过程中,在属性填充这一步,
会基于实例化出来的对象,对该对象中加了 @Autowired 的属性自动给属性赋值。
Spring 会先根据属性的类型去 Spring 容器中找出该类型所有的 Bean 对象,
如果找出来多个,则再根据属性的名字从多个中再确定一个。
如果 required 属性为 true,并且根据属性信息找不到对象,则直接抛异常。
@Service
public class OrderService {
private UserService userService;
/**
* @param userService the userService to set
*/
public void setUserService(UserService userService) {
this.userService = userService;
}
}
当 @Autowired 注解写在某个方法上时,Spring 在 Bean 生命周期的属性填充阶段, 会根据方法的参数类型、参数名字从 Spring 容器找到对象当做方法入参,自动反射调用该方法。
@Service
public class OrderService {
private UserService userService;
@Autowired
public OrderService(UserService userService) {
this.userService = userService;
}
public OrderService(UserService userService, UserService userService1) {
this.userService = userService;
}
}
@Autowired 加在构造方法上时,Spring 会在推断构造方法阶段,选择该构造方法来进行实例化,
在反射调用构造方法之前,会先根据构造方法参数类型、参数名从 Spring 容器中找到 Bean 对象当做构造方法入参。