关于@Autowired的使用及注意事项
@Autowired 注意事项
简单来说就是 在类型正确的前提下,先根据名字找,没找到时再根据类型找
例子如下:
如果容器中存在一个bean,这个bean的类型和id
与被标注@Autowired
的属性或者方法参数的类型和名称相同,那么此时的@Autowired
相当于
@Autowired @Qualifier("属性名")
例如:
存在一个接口TestInterface
,有两个实现类分别是TestClass1
和TestClass2
都在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目录下的文件路径的九种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2022-04-04浅谈SpringBoot项目如何让前端开发提高效率(小技巧)
这篇文章主要介绍了浅谈SpringBoot项目如何让前端开发提高效率(小技巧),主要介绍了Swagger和Nginx提高效率的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2019-04-04MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)
本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库中的两种方式,非常不错,具有参考借鉴价值,需要的朋友参考下吧2017-09-09
最新评论