关于@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实现的模糊匹配某文件夹下的文件并删除功能示例

    Java实现的模糊匹配某文件夹下的文件并删除功能示例

    这篇文章主要介绍了Java实现的模糊匹配某文件夹下的文件并删除功能,涉及java针对目录与文件的遍历、匹配、判断、删除等相关操作技巧,需要的朋友可以参考下
    2018-02-02
  • Java8 CompletableFuture详解

    Java8 CompletableFuture详解

    这篇文章主要介绍了Java8 CompletableFuture详解,CompletableFuture extends Future提供了方法,一元操作符和促进异步性以及事件驱动编程模型,需要的朋友可以参考下
    2014-06-06
  • 关于JAVA中this的使用方法小结

    关于JAVA中this的使用方法小结

    现在让大家看一个小例子,给你分享一下JAVA中“this”的用法,有需要的朋友可以参考一下
    2013-10-10
  • 基于opencv+java实现简单图形识别程序

    基于opencv+java实现简单图形识别程序

    这篇文章主要给大家介绍了如何基于opencv+java实现简单图形识别程序的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01
  • Java两整数相除向上取整的方式详解(Math.ceil())

    Java两整数相除向上取整的方式详解(Math.ceil())

    在调外部接口获取列表数据时,需要判断是否已经取完了所有的值,因此需要用到向上取整,下面这篇文章主要给大家介绍了关于Java两整数相除向上取整的相关资料,需要的朋友可以参考下
    2022-06-06
  • SpringBoot 整合Thymeleaf教程及使用方法

    SpringBoot 整合Thymeleaf教程及使用方法

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎,它与 JSP,Velocity,FreeMaker 等模板引擎类似,也可以轻易地与 Spring MVC 等 Web 框架集成,这篇文章主要介绍了SpringBoot 整合Thymeleaf教程及使用,需要的朋友可以参考下
    2023-11-11
  • IDEA中启动多个SpringBoot服务的实现示例

    IDEA中启动多个SpringBoot服务的实现示例

    本文主要介绍了IDEA中启动多个SpringBoot服务的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08
  • Java使用二分法进行查找和排序的示例

    Java使用二分法进行查找和排序的示例

    这篇文章主要介绍了Java使用二分法进行查找和排序的示例,二分插入排序和二分查找是基础的算法,需要的朋友可以参考下
    2016-04-04
  • 简谈java并发FutureTask的实现

    简谈java并发FutureTask的实现

    这篇文章主要介绍了简谈java并发FutureTask的实现,FutureTask都是用于获取线程执行的返回结果。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2019-06-06
  • 利用Java写一个学生管理系统

    利用Java写一个学生管理系统

    今天这篇文章就给给大家分享利用Java写一个学生管理系统吧,先写一个简单的用List来实现学生管理系统:
    2021-09-09

最新评论