获取 Bean 对象 (对象装配)DI

一. 对象装配 / 对象注入 的三种方法

1.属性注入

使用 @Autowired 注解实现

具体代码展示:如下,两个类都在Spring 中,现在使用 @Autowired 注解 ,将 UserService 对象注入到 UserController 中,并调用 UserService 中的 doService() 方法。

 

 

 具体代码:

@Autowired
    private UserService userService;

2.构造方法注入

同样使用 @Autowired 注解,使用过程同上,具体实现代码展示如下:

private UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

注意点:

1.构造方法是当前类的构造方法。

2.如果当前类中只有一个构造方法,那么可以不用写 @Autowired 注解。

3.如果有多个构造方法,只能在一个构造方法上写 @Autowired 注解,不然会报错。

3.setter 注入

同样也是通过 @Autowired 注解,在 setter 方法上进行添加,从而达到注入的效果。

private UserService userService;

    @Autowired
    public void setUserService(UserService userService) {
        this.userService = userService;
    }

二.实现注入的另一个关键字 —— @ Resource

@Resource 注解 是来自于Java 的 javax.annotation.Resource。 它的功能与@Autowired 相似,体现在属性注入和setter 注入上,用法与 @Autowired 完全一致。但@Resource 不支持 构造方法的注入,原因主要是,@Resource 注解的执行在构造方法之后。

@Autowired VS @Resource 的比较

二者比较起来可以发现,@Resource 有许多的参数,而 @Autowired 仅仅只有一个参数。

 

同一个类型多个 @Bean 报错

我们可能会遇到这样的问题,如下图:

我们在类中创建了两个方法,并通过 @Bean 注解将其存入到 Spring 中,

我们使用 @Resource 注解,将User 类型的 user 注入到其他类中,但我们可以发现在Spring中,并没有 与之匹配的 user ,只存在 user1 和 user2,此时运行程序会报错:非唯一的 Bean 对象。

 

 因此,就需要使用到 @Resource 中的参数来进行,确认谁与之匹配,或者将@qualifier 与@Autowired 搭配起来使用,具体做法如下:

    @Resource(name = "user1")
    private User user;

    public User getUser() {
        return user;
    }
    @Autowired
    @Qualifier(value = "user1")

    private User user;

    public User getUser() {
        return user;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值