Spring - 更简单的获取 Bean 对象

这篇具有很好参考价值的文章主要介绍了Spring - 更简单的获取 Bean 对象。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

二、获取 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 对象,JavaEE进阶,spring,java

    注:如果是在一个静态方法中或者是一个静态属性,此时加载的时机是在 spring容器初始化之前开始执行的,所以不能在静态方法中使用属性注入获取 Bean 对象的。

    所以在启动类的 main 方法中还是用原来的方式获取到 Controller 对象,重点是关注使用属性注入的方式是否可以拿到 Service 这个 Bean 对象。

Spring - 更简单的获取 Bean 对象,JavaEE进阶,spring,java

     如上图代码运行结果:就是使用属性注入的结果。

1.1 属性注入的优点和缺点:

    优点:属性注入的最大的优点就是实现简单,使用简单,只要给变量上边加上一个注解(@Auotwired),就可以在不 new 对象的情况下直接获取注入的对象了,(这就是DI,依赖注入)

    缺点:属性注入同样也会有很多问题,甚至编译器都不推荐使用这种方法,属性注入的缺点包含以下三个:

1. 功能性问题:无法注入一个不可变的对象(被 final 修饰的对象)

Spring - 更简单的获取 Bean 对象,JavaEE进阶,spring,java

2.兼容性问题:只能适用于 IoC 容器,也就是在IoC容器之外这种方式就不适用了。
3. 设计原则问题:容易违反单一谁原则(单一原则:一个类或者一个方法就只实现一个功能)但是加了属性注入之后,就有了更多的 Bean 对象,此时承担的职责也就更多了。

2. Setter注入

Spring - 更简单的获取 Bean 对象,JavaEE进阶,spring,java

     运行结果:

Spring - 更简单的获取 Bean 对象,JavaEE进阶,spring,java

 2.1 Setter注入的优点和缺点

    优点:完全符合单一设计的原则,每一个Setter 只针对一个对象。

    缺点:

1. 不能注入不可变对象(final 修饰的对象)Spring - 更简单的获取 Bean 对象,JavaEE进阶,spring,java

2. 注入的对象可以被修改

Spring - 更简单的获取 Bean 对象,JavaEE进阶,spring,java

 文章来源地址https://www.toymoban.com/news/detail-566290.html

 3. 构造方法注入(spring 官方推荐的对象注入方式)

Spring - 更简单的获取 Bean 对象,JavaEE进阶,spring,java

     运行结果:

Spring - 更简单的获取 Bean 对象,JavaEE进阶,spring,java

    特点: 如果当前类中只有一个构造方法的时候,允许在构造方法上面不加 @Autowired 注解,然后也是可以拿到 UserService 这个对象的;如下图运行结果:

Spring - 更简单的获取 Bean 对象,JavaEE进阶,spring,java

     运行结果:

Spring - 更简单的获取 Bean 对象,JavaEE进阶,spring,java

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 支持更多的参数设置,我们可以看下两个注解的源码:

Spring - 更简单的获取 Bean 对象,JavaEE进阶,spring,java

 

  3. @Autowired 可以在三种注入方法中都可以使用,但是 @Resource 只可以在 Setter注入和属性注入中使用,不能用在构造方法上,如下代码:

Spring - 更简单的获取 Bean 对象,JavaEE进阶,spring,java

 

到了这里,关于Spring - 更简单的获取 Bean 对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • spring中存储和获取bean对象

    存储 Bean 分为以下 2 步: 存储 Bean 之前,先得有 Bean 才⾏,因此先要创建⼀个 Bean, 说白了也就是写一个类。 告诉spring,把这个类的对象存起来。 编写 User 类, 有 sayHi 方法。 告诉 spring ,把这个类的对象存起来。 在配置文件中可以通过 bean 标签来告诉 spring 把对象存起来。

    2024年02月15日
    浏览(34)
  • Spring——更快捷的存储 / 获取Bean对象

    本人是一个普通程序猿!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果你也对编程感兴趣的话,互关一下,以后互相学习,共同进步。这篇文章能够帮助到你的话,劳请大家点赞转发支持一下! 上篇文章中,向Spring容器中添加对象,还要去配置文件里手动添

    2024年02月15日
    浏览(32)
  • Spring更简单的存储和读取Bean对象

    目录 1.第一个Spring项目 2.存储Bean对象 2.1 准备工作 2.2 五大类注解 2.3 方法注解@Bean 2.4 Bean对象的默认命名规则 3. 读取Bean对象 3.1 属性注入 3.2 setter注入 3.3 构造方法注入 3.4 注入异常问题 3.5 注入方式优缺点 3.6 @Autowired和@Resource的区别 在学习更简单的方式来读取和存储Bean对象

    2024年02月03日
    浏览(38)
  • spring boot applicationContext.getBeansOfType 无法获取所有bean对象

     代码如上所示,我想在某个service中注入所有AvatarScanCallback类型bean对象,但是发现无法注入全部bean, 最后检查发现是因为有些AvatarScanCallback的子对象中存在循环依赖问题导致此时只能获取一部分。  

    2024年02月17日
    浏览(33)
  • 【JavaEE进阶】 利用Spring简单实现加法计算器和用户登录

    本篇博客主要内容: 理解前后端交互过程 接⼝传参,数据返回,以及⻚⾯展⽰ 需求:输⼊两个整数,点击\\\"点击相加\\\"按钮,显⽰计算结果 效果展示如下: 具体实现步骤,博主大致分为以下几步: 准备工作 约定前后端交互接⼝ 后端服务器代码的书写 创建SpringBoot项⽬: 引⼊Spring Web依

    2024年01月17日
    浏览(44)
  • spring(1):基于XML获取Bean对象以及各种依赖注入方式

    1.1 根据id获取 1.2 根据类型获取 1.3 根据id和类型获取 注意: 当根据类型获取bean时,要求IOC容器中指定类型的bean有且只能有一个。 例如以下XML文件,当IOC容器中一共配置了两个,根据类型获取时会抛出异常。 根据类型来获取bean时,在满足bean唯一性的前提下,其实只是看:

    2024年01月25日
    浏览(34)
  • JavaEE 突击 5 - Spring 更简单的读取和存储对象(2)

    大家新年快乐 , 祝大家新的一年如图 这个专栏给大家介绍一下 Java 家族的核心产品 - SSM 框架 JavaEE 进阶专栏 Java 语言能走到现在 , 仍然屹立不衰的原因 , 有一部分就是因为 SSM 框架的存在 接下来 , 博主会带大家了解一下 Spring、Spring Boot、Spring MVC、MyBatis 相关知识点 并且带领

    2024年02月19日
    浏览(42)
  • JavaEE——Spring中存取Bean的注解

    目录 一、存储Bean对象 1、定义 2、存储方式 (1)、类注解 【1】、@Controller(控制器存储) 【2】、@Service(服务存储) 【3】、@Repository(仓库存储) 【4】、@Component(组件存储) 【5】、@Configuration(配置存储) (2)、方法注解@Bean 3、重命名Bean 二、获取Bean对象 1、注入关

    2024年02月16日
    浏览(26)
  • javaee spring配置文件bean标签详解

    bean标签中添加scope属性,设置bean对应对象生成规则. scope = “singleton” 单例,默认值,适用于实际开发中的绝大部分情况. scope=“prototype” 多例,适用于struts2中的action配置 注意: 只对单例有效,设置scope=\\\"singleton\\\"时测试 延时创建属性. lazy-init=“false” 默认值,不延迟创建,即在启动时

    2024年02月11日
    浏览(45)
  • 【Spring】-Spring中Bean对象的存取

    作者 :学Java的冬瓜 博客主页 :☀冬瓜的主页🌙 专栏 :【Framework】 主要内容 :往spring中存储Bean对象的三大方式:XML方式(Bean标签);五大类注解;方法注解。从spring中取对象的两种方式:基本方法、注解方法(属性注入、set注入、构造方法注入)。 在Spring中,Bean的装配方式

    2024年02月12日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包