目录
二、获取 Bean 对象(对象装配或者对象注入)
1. 属性注入
1.1 属性注入的优点和缺点:
2. Setter注入
2.1 Setter注入的优点和缺点
3. 构造方法注入(spring 官方推荐的对象注入方式)
3.1 构造方法的优点和缺点
4. @Autowired 注解 和 @Resource 注解的区别
4.1 @Autowired 和 @Source 的区别
前言
上一篇文章讲到了如何更简单的存储 Bean 对象,有两种方式: 1. 使用五大 类注解,2. 使用 @Bean 方法注解。这篇文章继续介绍如何更简单的获取 Bean 对象。
二、获取 Bean 对象(对象装配或者对象注入)
对象注入 : 更加简单的读取 Bean 对象(指的是从 Spring 容器中读取某个对象,放到当前类里面)
在 Spring 中实现依赖注入的常见方式有三种:
1. 属性注入 |
2. Setter 注入 |
3. 构造方法注入 |
1. 属性注入
目标:在 Controller 中 得到一个 Service 对象:(如下代码所示,使用 @Autowired 的方式来实现对象注入)
注:如果是在一个静态方法中或者是一个静态属性,此时加载的时机是在 spring容器初始化之前开始执行的,所以不能在静态方法中使用属性注入获取 Bean 对象的。
所以在启动类的 main 方法中还是用原来的方式获取到 Controller 对象,重点是关注使用属性注入的方式是否可以拿到 Service 这个 Bean 对象。
如上图代码运行结果:就是使用属性注入的结果。
1.1 属性注入的优点和缺点:
优点:属性注入的最大的优点就是实现简单,使用简单,只要给变量上边加上一个注解(@Auotwired),就可以在不 new 对象的情况下直接获取注入的对象了,(这就是DI,依赖注入)
缺点:属性注入同样也会有很多问题,甚至编译器都不推荐使用这种方法,属性注入的缺点包含以下三个:
1. 功能性问题:无法注入一个不可变的对象(被 final 修饰的对象)
|
2.兼容性问题:只能适用于 IoC 容器,也就是在IoC容器之外这种方式就不适用了。 |
3. 设计原则问题:容易违反单一谁原则(单一原则:一个类或者一个方法就只实现一个功能)但是加了属性注入之后,就有了更多的 Bean 对象,此时承担的职责也就更多了。 |
2. Setter注入
运行结果:
2.1 Setter注入的优点和缺点
优点:完全符合单一设计的原则,每一个Setter 只针对一个对象。
缺点:
1. 不能注入不可变对象(final 修饰的对象) |
2. 注入的对象可以被修改
文章来源地址https://www.toymoban.com/news/detail-566290.html |
3. 构造方法注入(spring 官方推荐的对象注入方式)
运行结果:
特点: 如果当前类中只有一个构造方法的时候,允许在构造方法上面不加 @Autowired 注解,然后也是可以拿到 UserService 这个对象的;如下图运行结果:
运行结果:
3.1 构造方法的优点和缺点
优点:
1. 可以注入一个不可变的对象。(final 修饰的对象)在Java中,被final 修饰的对象必须满足两个条件中的任意一个: (1)final 修饰的对象,要么直接进行赋值。 (2)final 修饰的对象,要么必须在构造方法中赋值。 |
2. 注入的对象不会被修改。(因为构造方法只能调用一次) |
3. 注入的对象完全被初始化。(一个类是先执行实例化,然后执行初始化,在初始化时就会把 Bean 对象注入到当前类当中) |
4. 兼容性更好。(构造方法是所有框架都支持的,所以脱离IoC容器也可以使用) |
4. @Autowired 注解 和 @Resource 注解的区别
在进行类注入的时候除了使用 @Autowired 注解之外,还可以使用 @Resource 注解,两种在大部分的场景下使用是没有区别的,都可以实现对象注入,但是也是有一点点区别的
4.1 @Autowired 和 @Source 的区别
1. 出身不同:@Autowired 是属于spring 的,而 @Resource 来自于JDK的注解。 |
2. 使用时设置的参数不同:相对 @Autowired,@Resource 支持更多的参数设置,我们可以看下两个注解的源码:
|
3. @Autowired 可以在三种注入方法中都可以使用,但是 @Resource 只可以在 Setter注入和属性注入中使用,不能用在构造方法上,如下代码: 文章来源:https://www.toymoban.com/news/detail-566290.html
|
到了这里,关于Spring - 更简单的获取 Bean 对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!