关于@Autowired的使用及注意事项

 更新时间:2024年05月07日 10:14:25   作者:JinF~  
这篇文章主要介绍了关于@Autowired的使用及注意事项,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

@Autowired 注意事项

简单来说就是 在类型正确的前提下,先根据名字找,没找到时再根据类型找

例子如下:

如果容器中存在一个bean,这个bean的类型和id与被标注@Autowired的属性或者方法参数的类型和名称相同,那么此时的@Autowired相当于

@Autowired
@Qualifier("属性名")

例如:

存在一个接口TestInterface,有两个实现类分别是TestClass1TestClass2都在spring容器中,此时有一个SomeClass类需要注入一个TestInterface属性

代码如下:

@Component
@Slf4j
public class SomeClass {

    @Autowired
    //这种方式会报错,因为存在两个TestInterface类型的bean
    private TestInterface testInterface;
    
	//不会报错,因为此时相当于
	/*
	@Autowired
	@Qualifier("testClass1")
	*/
	@Autowired
	private TestInterface testClass1;

    public TestInterface getTestClass() {
        return testClass1;
    }
}

可以在某一个组件上加上@Primary,强制使用该类型,比如

@Component
@Primary
public class TestClass2 implements TestInterface {
    private String s="testClass2";

    public String getS() {
        return s;
    }
}

那么

@Autowired
	private TestInterface testClass1;

testClass1此时的类型是TestClass2

@Autowired放的位置

1.放在属性前,比如controller层调用service层,加在属性前不会调用set方法

@RestController
@RequestMapping("/student/card")
public class CardController {
    @Autowired
    CardService cardService;
}

2.放在set方法前,会通过调用set方法给属性赋值

@RestController
@RequestMapping("/student/card")
public class CardController {
    
    CardService cardService;
    
    @Autowired
    public void setCardService(CardService cardService) {
        this.cardService = cardService;
    }
}

3.写在set方法的参数列表中:只能是@Bean的形式,(可以不写,会默认@Autowired),并且默认通过名字注入,相当于

public SomeClass someClass(@Autowired @Qualifier("card") Card card)
	@Bean
    public SomeClass someClass(@Autowired Card card){
        SomeClass someClass=new SomeClass();
        someClass.setCard(card);
        return someClass;
    }
    
    @Bean
    public Card card(){
        Card card=new Card();
        card.setStudentId("01");
        return card;
    }

根据名字注入

同时使用@Autowired@Qualifier("beanName")

	@Autowired
    @Qualifier("beanName")
    private MybatisCardMapper mapper;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java实现读取resources目录下的文件路径的九种方式

    Java实现读取resources目录下的文件路径的九种方式

    本文主要介绍了Java实现读取resources目录下的文件路径的九种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • spring/springboot整合dubbo详细教程

    spring/springboot整合dubbo详细教程

    今天教大家如何使用spring/springboot整合dubbo,文中有非常详细的图文介绍及代码示例,对正在学习java的小伙伴有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • 浅谈SpringBoot项目如何让前端开发提高效率(小技巧)

    浅谈SpringBoot项目如何让前端开发提高效率(小技巧)

    这篇文章主要介绍了浅谈SpringBoot项目如何让前端开发提高效率(小技巧),主要介绍了Swagger和Nginx提高效率的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • 将bean注入到Spring中的方式总结

    将bean注入到Spring中的方式总结

    在Java的Spring框架中,将bean注入到容器中是核心概念之一,这是实现依赖注入的基础,Spring提供了多种方式来将bean注入到容器中,本文给大家总结了将bean注入到Spring中的几种方式,需要的朋友可以参考下
    2023-12-12
  • 详解Java 加密解密和数字签名问题

    详解Java 加密解密和数字签名问题

    在做项目中,只要涉及敏感信息,或者对安全有一定要求的场景,都需要对数据进行加密。接下来通过本文给大家分享Java 加密解密和数字签名问题,感兴趣的朋友跟随小编一起看看吧
    2021-12-12
  • Java如何使用ReentrantLock实现长轮询

    Java如何使用ReentrantLock实现长轮询

    这篇文章主要介绍了如何使用ReentrantLock实现长轮询,对ReentrantLock感兴趣的同学,可以参考下
    2021-04-04
  • Session过期后实现自动跳转登录页面

    Session过期后实现自动跳转登录页面

    这篇文章主要介绍了Session过期后实现自动跳转登录页面,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • Java中方法优先调用可选参数还是固定参数

    Java中方法优先调用可选参数还是固定参数

    这篇文章主要介绍了Java中方法优先调用可选参数还是固定参数,可选参数是 JDK 5 中新增的特性,也叫变长参数或可变参数,固定参数的概念恰好与可选参数相反,固定参数也就是普通的参,下文更多详细内容需要的小伙伴可以参考一下
    2022-05-05
  • SpringBoot中的错误处理机制源码解析

    SpringBoot中的错误处理机制源码解析

    这篇文章主要介绍了SpringBoot中的错误处理机制源码解析,springboot根据访问者的request中的Accept属性来判断要返回什么样的数据,SpringBoot存在一个错误处理机制,会根据不同请求返回不同的结果,需要的朋友可以参考下
    2023-12-12
  • MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)

    MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)

    本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库中的两种方式,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-09-09

最新评论