“@Autowired 是如何工作的”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) (建立内容为“1”的新页面) |
Jihongchang(讨论 | 贡献) |
||
(未显示同一用户的5个中间版本) | |||
第1行: | 第1行: | ||
− | + | @Autowired 表示某个属性是否需要进行依赖注入,可以写在属性和方法上。 | |
+ | |||
+ | 注解中的 required 属性默认为 true,表示如果没有对象可以注入给属性则抛异常。<syntaxhighlight lang="java"> | ||
+ | @Service | ||
+ | public class OrderService { | ||
+ | |||
+ | @Autowired | ||
+ | private UserService userService; | ||
+ | |||
+ | } | ||
+ | </syntaxhighlight>@Autowired 加在某个属性上,Spring 在进行 Bean 的生命周期过程中,在属性填充这一步, | ||
+ | |||
+ | 会基于实例化出来的对象,对该对象中加了 @Autowired 的属性自动给属性赋值。 | ||
+ | |||
+ | Spring 会先根据属性的类型去 Spring 容器中找出该类型所有的 Bean 对象, | ||
+ | |||
+ | 如果找出来多个,则再根据属性的名字从多个中再确定一个。 | ||
+ | |||
+ | 如果 required 属性为 true,并且根据属性信息找不到对象,则直接抛异常。 | ||
+ | |||
+ | <syntaxhighlight lang="java"> | ||
+ | @Service | ||
+ | public class OrderService { | ||
+ | |||
+ | private UserService userService; | ||
+ | |||
+ | /** | ||
+ | * @param userService the userService to set | ||
+ | */ | ||
+ | public void setUserService(UserService userService) { | ||
+ | this.userService = userService; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </syntaxhighlight>当 @Autowired 注解写在某个方法上时,Spring 在 Bean 生命周期的属性填充阶段, | ||
+ | |||
+ | 会根据方法的参数类型、参数名字从 Spring 容器找到对象当做方法入参,自动反射调用该方法。<syntaxhighlight lang="java"> | ||
+ | @Service | ||
+ | public class OrderService { | ||
+ | |||
+ | private UserService userService; | ||
+ | |||
+ | @Autowired | ||
+ | public OrderService(UserService userService) { | ||
+ | this.userService = userService; | ||
+ | } | ||
+ | |||
+ | public OrderService(UserService userService, UserService userService1) { | ||
+ | this.userService = userService; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </syntaxhighlight>@Autowired 加在构造方法上时,Spring 会在推断构造方法阶段,选择该构造方法来进行实例化, | ||
+ | |||
+ | 在反射调用构造方法之前,会先根据构造方法参数类型、参数名从 Spring 容器中找到 Bean 对象当做构造方法入参。 |
2024年7月21日 (日) 03:57的最新版本
@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 对象当做构造方法入参。