栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

了解Spring @Autowired用法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

了解Spring @Autowired用法

TL; DR

@Autowired注释使你无需在XML文件中(或以任何其他方式)自行进行布线,而只是为你找到需要注入的内容,然后为你完成。

完整说明

该@Autowired注释允许你对什么注入其他地方跳过配置,只是它给你的。假设你的软件包是com.mycompany.movies你必须将此标记放入XML(应用程序上下文文件)中:

<context:component-scan base-package="com.mycompany.movies" />

该标签将进行自动扫描。假设必须成为Bean的每个类都使用正确的注释

@Component
(例如(对于简单bean)或
@Controller
(对于servlet控件)或
@Repository
(对于DAO类))进行注释,并且这些类位于包的某个位置
com.mycompany.movies,Spring
将查找所有这些并创建每个豆一个。这是通过对类的2次扫描完成的-第一次是它仅搜索需要成为bean的类并映射它需要进行的注入,而在第二次扫描中,它将注入bean。当然,你可以在更传统的XML文件中或使用@Configuration类(或这三种的任意组合)来定义bean 。

@Autowired
注解告诉Spring去哪里注射需要发生。如果将其放在方法上,
setMovieFinder
它将理解(通过前缀
set+ @Autowired
注释)需要注入
bean
。在第二次扫描中,
Spring
搜索类型为的
bean MovieFinder
,如果找到该
bean
,则将其注入此方法。如果它找到两个这样的豆,你将得到一个
Exception
。为了避免
Exception
,你可以使用
@Qualifier
注释,并通过以下方式告诉它注入两个
bean
中的哪个:

@Qualifier("redBean")class Red implements Color {   // Class pre here}@Qualifier("blueBean")class Blue implements Color {   // Class pre here}

或者,如果你更喜欢在XML中声明bean,则看起来像这样:

<bean id="redBean" /><bean id="blueBean" />

在@Autowired声明中,你还需要添加,@Qualifier以指示要注入的两种颜色的bean:

@Autowired@Qualifier("redBean")public void setColor(Color color) {  this.color = color;}

如果你不想使用两个注释(@Autowired和@Qualifier),可以使用@Resource这两个注释:

@Resource(name="redBean")public void setColor(Color color) {  this.color = color;}

在@Resource(你可以在这个答案的第一个评论阅读关于它的一些额外的数据),备件你使用两个注释,而是只使用一个。

我将再添加两个评论:

优良作法是使用

@Inject
而不是
@Autowired
因为它不是特定于
Spring
的并且是标准的一部分
JSR-330

另一个好的做法是将
@Inject/ @Autowired
放在构造函数上,而不是方法上。如果将其放在构造函数上,则可以验证注入的Bean不是null,并且在尝试启动应用程序时会快速失败,并
NullPointerException
在需要实际使用Bean时避免出现。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/385707.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号