一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情。
Spring的DI机制,将原本属于程序中自己创建对象的工作交给了Spring框架来完成,为项目的开发提供了很大的便捷性,下面将详细介绍Spring中提供的一个用于自动注入的常用注解Autowired。
@Autowired用法介绍
1.当容器中只有一个指定类型的Bean时,会直接按照类型完成Bean的自动装配.
2.当容器中同时存在着多个类型相同的Bean时,使用@Autowired会默认再去按照bean的名称进行装配。
3.当容器中存在着多个类型相同的Bean时,会再次优先按照名称进行装配,也可以通过@Qualifier指定需要装配的Bean的名称完成Bean的自动装配
4.当容器中没有指定类型的Bean时,在自动装配的时候默认会抛出异常:异常信息大概是NosuchBeanDefinitionException异常
5.当容器中存在着多个类型和名称相同的Bean时,可以通过@Primary来指定优先装配。
@Autowired的使用范围
先看看@Autowired注解的定义:
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {
boolean required() default true;
}
可以看出@Autowired注解的作用范围右五种 CONSTRUCTOR(构造器)、METHOD(方法)、PARAMETER(参数)、FIELD(成员变量)、ANNOTATION_TYPE(注解)。
该注解我们平常使用最多的地方可能是在成员变量上。
@Autowired
private SysAuditInfoMapper sysAuditInfoMapper;
在构造器上使用Autowired注解:
@Autowired
public SysAuditInfoService(SysAuditInfo sysAuditInfo) {
this.sysAuditInfo = sysAuditInfo;
}
在普通方法上加Autowired注解:
@Autowired
public void test(IUser user) {
user.say();
}
可以在构造器的入参上加Autowired注解:
public SysAuditInfoService( @Autowired SysAuditInfo sysAuditInfo) {
this.sysAuditInfo = sysAuditInfo;
}
@Autowired和@Resouce的区别
@Resource和@Autowired都可以完成自动装配,但是他们之间也是有区别的,具体区别如下
- @Autowired默认按byType自动装配,@Resource默认byName自动装配。
- @Autowired只包含一个参数:required,而@Resource包含七个参数,其中最重要的两个参数是:name 和 type。
- @Autowired如果要使用byName,需要使用@Qualifier一起配合。而@Resource如果指定了name,则用byName自动装配,如果指定了type,则用byType自动装配。
- @Autowired能够用在:构造器、方法、参数、成员变量和注解上,而@Resource能用在:类、成员变量和方法上。
好了,本文就给大家介绍到这里,Spring自动装配中的@Autowired注解介绍完毕!感觉有帮助的,留下个赞或评论再走吧!谢啦~ 💐