@Resource注解和@Autowired注解的区别

news/2024/10/19 17:37:30

@Autowired注解是Spring提供的,而@Resource注解是J2EE本身提供的;@Autowird注解默认通过byType方式注入,而@Resource注解默认通过byName方式注入;@Autowired注解注入的对象需要在IOC容器中存在,否则需要加上属性required=false,表示忽略当前要注入的bean。

一、@Resource注解和@Autowired注解的区别

@Autowired注解是Spring提供的,而@Resource注解是J2EE本身提供的

@Autowird注解默认通过byType方式注入,而@Resource注解默认通过byName方式注入

@Autowired注解注入的对象需要在IOC容器中存在,否则需要加上属性required=false,表示忽略当前要注入的bean,如果有直接注入,没有跳过,不会报错

对于byName和byType方式不太熟悉的可以看一下这里:Spring中的byName与byType

简单来说,byName就是变量名去匹配bean的id属性,而byType则是变量类型去匹配bean的class属性

<bean id=”userService” class=”com.test.UserServiceImpl”>

</bean>

@Autowired

private UserService userService;

此处byName就是拿变量名userService去匹配IOC容器的iduserService,匹配成功;而byType就是拿变量类型UserService去匹配IOC容器的idcom.test.UserService.UserServiceImpl,因为UserServiceImpl是UserService实现,所以也匹配成功。

延伸阅读:

二、@Autowird注解的使用

步骤:@Autowird默认的注入方式为byType,也就是根据类型匹配,当有多个实现时,则通过byName注入,也可以通过配合@Qualifier注解来显式指定name值,指明要使用哪个具体的实现类

举例:

首先有一个接口UserService和两个实现类UserServiceImpl1和UserServiceImpl2,并且这两个实现类已经加入到Spring的IOC容器中了

@Service

public class UserServiceImpl1 implements UserService

@Service

public class UserServiceImpl2 implements UserService

1通过@Autowired注入使用

@Autowired

private UserService userService;

根据上面的步骤,可以很容易判断出,直接这么使用是会报错的

原因:首先通过byType注入,判断UserService类型有两个实现,无法确定具体是哪一个,于是通过byName方式,这里的变量名userService也无法匹配IOC容器中id(此处指的userServiceImpl1和userServiceImpl2),于是报错。

注意:通过注解注入到IOC容器的id值默认是其类名首字母小写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/73511.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

在C#中基于Semantic Kernel的检索增强生成(RAG)实践

Semantic Kernel简介 玩过大语言模型(LLM)的都知道OpenAI,然后微软Azure也提供了OpenAI的服务:Azure OpenAI,只需要申请到API Key,就可以使用这些AI服务。使用方式可以是通过在线Web页面直接与AI聊天,也可以调用AI的API服务,将AI的能力集成到自己的应用程序中。不过这些…

南沙C++信奥赛陈老师解一本通题 1286:怪盗基德的滑翔翼

​ 【题目描述】怪盗基德是一个充满传奇色彩的怪盗,专门以珠宝为目标的超级盗窃犯。而他最为突出的地方,就是他每次都能逃脱中村警部的重重围堵,而这也很大程度上是多亏了他随身携带的便于操作的滑翔翼。 有一天,怪盗基德像往常一样偷走了一颗珍贵的钻石,不料却被柯南小朋…

web端ant-design-vue-Anchor锚点组件使用小节(2)

项目开发中有幸遇到了更细化的页面滚动问题,详情中我有多个履约节点子模块,除了正常的锚点和页面联动之外,客户希望我从列表中点击某个履约模块子节点,跳转到选中的履约模块子节点下面;如果没有子节点模块,则跳转到父级履约节点模块。实现这个功能大概这么两步,1、在子节…

netcore grpc

netcore grpc 一、solution创建空解决方案 > dotnet new sln -n Apricot.Grpc二、Grpc.Server创建Apricot.Grpc类库项目 > dotnet new classlib -n Apricot.Grpc# 解决方案添加类库项目> dotnet sln add Apricot.Grpc/Apricot.Grpc.csproj安装依赖 > dotnet add pa…

NOIP 计划 R15

NOIP 计划 R15 \(\def\EZ{\textcolor{#51af44}{\text{EZ}}}\EZ\) 表示简单,10分钟内就能想到。 \(\def\HD{\textcolor{#3173b3}{\text{HD}}}\HD\) 表示中等,能独立想出 \(\def\IN{\textcolor{#be2d23}{\text{IN}}}\IN\) 表示困难,独立思考能想到 \(50\%\) 以上 \(\def\AT{\t…

星际战甲 - 武器配卡

题记部分 一、主武器二、副武器三、近战武器 3.1、弧光蓄电重锤 — 业精于勤荒于嬉,行成于思毁于随 —