Spring三种注解注入方式@Autowired,@Resouce,@Inject

准备

Controller层调用Service层

Service层Interface:

public class UserServiceImpl implements UserService {
    // ... 代码
}

Service层实现类:

public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
	
}

调用方式

Controller层三种调用Service注解:(@Autowired,@Resouce,@Inject,其中@Inject使用较少)

@Autowired
private IUserService userService;
@Resource
private IUserService userService;
@Inject
private IUserService userService;

区别

1.@Autowired
默认是先按照类型注入,如果一个类型存在多个bean,再按照bean的名称,即id进行注入。特点:
①可以作用到构造方法上、属性上、方法上
②拥有 required 属性,表示在IOC容器加载时,是否必须注入。如果标注为false则不会再IOC容器启动加载时注入IOC容器。

@Autowired(required = false)

③根据 @Retention(RetentionPolicy.RUNTIME) ,注解保留至运行期
④可以和Qualifier搭配使用,按照指定id的bean对象注入

@Qualifier(value = "uService")

2.@Resource
是JDK提供的注解,在javax.annotation包下,属于JSR250规范。
@Resource只能使用bean名称进行注入。没有required属性,即容器初始化时就必须注入对象,若无法注入则报错。特点:有name属性

//从容器中寻找id为uService的bean注入
@Resource(name="uService")

3.@Inject
属于JSR330的规范,若要使用@Inject注解则需要引入以下依赖

<dependency>
    <groupId>javax.inject</groupId>
    <artifactId>javax.inject</artifactId>
    <version>1</version>
</dependency>

特点:搭配@Named使用,按照id注入bean

@Named(value = "uService")

总结

1.@Resource是JavaEE规范定义的注解,@Autowired是Spring框架提供的注解, @Inject 是JSR-330规范中的注解。
2.@Resource是按照名称进行注入的,它可以通过name属性指定具体要注入的资源名称,如果未指定名称,则按照类型进行注入。而@Autowired是按照类型进行注入的,它会根据类型在容器中找到对应的实例进行注入。不行的话会根据名称来进行注入。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值