Spring更简单的读取对象Bean

IoC 和 DI 是 Spring 中最重要的两个概念,其中 IoC(Inversion of Control)为控制反转的思想,而 DI(Dependency Injection)依赖注入为其(IoC)具体实现。那么 DI 实现依赖注入的方式有几种?这些注入方式又有什么不同?

一. 读取方法

1. 属性注入

最核心的代码

 @Autowired
    public   UserService  userService;

1.1 优点
属性注入最大的优点就是实现简单、使用简单,只需要给变量上添加一个注解(@Autowired),就可以在不 new 对象的情况下,直接获得注入的对象了,所以它的优点就是使用简单。
1.2 缺点

  • 功能性问题:无法注入一个不可变的对象(final 修饰的对象);
  • 通用性问题:只能适应于 IoC 容器;
  • 设计原则问题:更容易违背单一设计原则。

2. Setter注入

核心代码

public   UserService  userService;/*使用@Autowired注解,引入UserService类*/
    //在一个类中调用另一个类

    @Autowired/*Setter注入*/
    public void setUserService(UserService userService) {
        this.userService = userService;
    }

从上面代码可以看出,Setter 注入比属性注入要麻烦很多。
要说 Setter 注入有什么优点的话,那么首先就是它完全符合单一职责的设计原则,因为每一个 Setter 只针对一个对象。
但它的缺点也很明显:

  • 不能注入不可变对象(final 修饰的对象)

  • 注入的对象可被修改

3. 构造方法注入

public   UserService  userService;

 @Autowired/*构造方法注入*/
   public UserController(UserService userService) {
       this.userService = userService;
    }

构造方法注入相比于前两种注入方法,它可以注入不可变对象,并且它只会执行一次,也不存在像 Setter 注入那样,被注入的对象随时被修改的情况,它的优点有以下 4 个:

  1. 可注入不可变对象;

  2. 注入对象不会被修改;

  3. 注入对象会被完全初始化;

  4. 通用性更好

二. 注入关键字

除了 @Autowired,还可以使用另一个关键字
@Resource

@Autowired 和 @Resource 的区别

  • 出身不同
    @Autowired 来自于 Spring,而 @Resource 来自于 JDK 的注解
  • 使用时设置的参数不同
    相比于 @Autowired 来说,@Resource 支持更多的参数设置,例如
    name 设置,根据名称获取 Bean
  • @Autowired 可用于 Setter 注入、构造函数注入和属性注入,而 @Resource 只能用于 Setter 注入和属性注入,不能用于构造函数注入
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值