Java spring的三种注入方式详解流程

目录
  • 设置Spring的作用域
  • 自动注入
  • @Primary
  • Qualifier
  • @ComponentScan不同的配置对性能的影响
  • 懒加载
  • 三种注入方式
  • 字段注入(IDEA 会提示不推荐)
    • 字段注入的bean类外部不可见
    • 循环依赖问题
  • 构造器注入(官方推荐)
    • set方法注入

设置Spring的作用域

或者使用枚举值设置

单例和多里使用场景

自动注入

@Primary

一个接口有多个实现被spring管理吗,在依赖注入式,spring会不知道注入哪个实现类就会抛出NoUniqueBeanDefinitionException异常
使用@Primary 来告诉Spring 注入哪个实现类

Qualifier

@ComponentScan不同的配置对性能的影响

优化bean配置对spring应用程序的性能影响

在Spring中我们可以通过设置哦组件的扫描范围来简化javaBean的注入过程

在需要大规模对象注入的场景下使用@ComponentScan注解来指定包扫描分为,当然指定包路径中的类需要加@Component注解让Spring创建管理。

懒加载

spring默认使用预加载,及在Spring项目启动时创建bean
懒加载:在spring项目启动不去创建bean, 在使用时创建

三种注入方式

字段注入(IDEA 会提示不推荐)

字段注入的缺点:

  • 字段注入的bean类外部不可见
  • 循环依赖问题
  • 无法设置需要注入的对象为final, 也无法注入那些不可变的对象

字段注入的bean类外部不可见

使用字段注入最大的问题就是配注入类(HealthRecorSercice)的外部可见性,及HealthRecorSercice只能在ClientService 类中被访问,脱离的容器环境就无法被访问,就导致类和容器的耦合度太高,无法脱离容器使用目标对象。
在外部类new 一个ClientService 调用包含了字段注入bean的方法,就会抛出 HealthRecorSercice类空指针异常

循环依赖问题

如下A和B发生了循环依赖,但是种在Spring中是合法的编译启动Sring类时并不会抛出以异常,只有在使用到A或者B时才会报错

被字段注入的对象是在,需要注入他类的实例化之前被实例化好。

构造器注入(官方推荐)

构造器注入就是通过类的构造函数注入
构造器注入可以解决:

  • 类外部不可见
  • 无法设置需要注入的对象为final, 也无法注入那些不可变的对象

不能解决:循环依赖问题
代码可读性不高

使用构造器注入出现了循环依赖吗,在Spring项目启动时就会抛出循环依赖异常

set方法注入

set注入可以解决:

  • 类外部不可见
  • 循环依赖问题
  • 无法设置需要注入的对象为final, 也无法注入那些不可变的对象

到此这篇关于Java spring的三种注入方式详解流程的文章就介绍到这了,更多相关Java spring注入方式内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java 图解Spring启动时的后置处理器工作流程是怎样的

    探究Spring的后置处理器 本次我们主要探究invokeBeanFactoryPostProcessors():后面的代码下次再做解析: 入口代码refresh() AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(); // ...... applicationContext.refresh(); public void refresh() throws

  • Java 自定义Spring框架以及Spring框架的基本使用

    从现在开始,大家可以跟随着我的脚步来自定义一个属于自己的Spring框架.但是,在学习自定义Spring框架之前,我们得先来回顾一下Spring框架的基本使用.知晓了Spring框架的基本使用之后,我们将会在此基础上分析Spring的核心,即IoC,最后我们会对该核心进行一个模拟. 相信大家都使用过Spring框架,现在恐怕是无人不知Spring了吧!我相信你在实际项目开发中肯定用到过它,一般在实际项目中用到它的话,都会采用Java EE的三层架构,这三层架构是: 数据访问层,也即Dao层 业务

  • Java 自定义Spring框架与Spring IoC相关接口分析

    在本讲,我们来对Spring IoC功能相关的接口逐一进行分析,分析这些接口的原因就是为了我们自己定义Spring IoC功能提前做好准备. Spring IoC相关接口分析 BeanFactory接口解析 对于BeanFactory接口,我之前只是稍微提到过,并且将就着用了一下它.这里,我将会对BeanFactory接口进行一个具体讲解. Spring中bean的创建是典型的工厂模式,这一系列的bean工厂,即IoC容器,为开发者管理对象之间的依赖关系提供了很多便利和基础服务,在Spring中

  • Java SpringBoot 集成 Redis详解

    目录 1.概述 Redis是什么? Redis能该干什么? 特性 2.测试Redis 3.自定义redisTemplate 1.概述 Redis是什么? Redis(Remote Dictionary Server ),即远程字典服务. 是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. 与memcached一样,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加

  • java和Spring中观察者模式的应用详解

    目录 一.观察者模式基本概况 1.概念 2.作用 3.实现方式 二.java实现两种观察者模式 1.Observer接口和Observable类 2.EventObject和EventListener 三.Spring事件监听实战及原理 1.Spring如何使用EventObject和EventListener实现观察者? 2.先实战-要先会用 3.会原理-搞清楚为什么会这样 四.最后一张图总结 一.观察者模式基本概况 1.概念 观察者模式(Observer Design Pattern)也被称

  • Java spring的三种注入方式详解流程

    目录 设置Spring的作用域 自动注入 @Primary Qualifier @ComponentScan不同的配置对性能的影响 懒加载 三种注入方式 字段注入(IDEA 会提示不推荐) 字段注入的bean类外部不可见 循环依赖问题 构造器注入(官方推荐) set方法注入 设置Spring的作用域 或者使用枚举值设置 单例和多里使用场景 自动注入 @Primary 一个接口有多个实现被spring管理吗,在依赖注入式,spring会不知道注入哪个实现类就会抛出NoUniqueBeanDefin

  • Spring Bean三种注入方式详解

    在Spring容器中为一个bean配置依赖注入有三种方式: 使用属性的setter方法注入  这是最常用的方式: 使用构造器注入: 使用Filed注入(用于注解方式). Field注入是最常见的一种方式,可以采用 @Autowired 对Bean类的接口进行初始化,代码如下 @ContextConfiguration({"/META-INF/spring/amazing-base.xml"}) @RunWith(SpringJUnit4ClassRunner.class) public

  • Spring bean 四种注入方式详解

    目录 一.Set方式注入 pojo层: 1.xml 文件 test测试 二.构造函数方式注入 pojo层 2.xml文件 test测试 三.注解注入 pojo层 3.xml文件 test测试 四.JavaConfig 方式注入 pojo层 JavaConfig 类 xml文件 扫描包 测试: 五.Service层注入详解 service serviceImpl xml配置文件 总结 一.Set方式注入 pojo层: /** * @Author: crush * @Date: 2021-06-17

  • Spring中Bean的三种实例化方式详解

    目录 一.环境准备 二.构造方法实例化 三.分析Spring的错误信息 四.静态工厂实例化 4.1 工厂方式创建bean 4.2 静态工厂实例化 五.实例工厂与FactoryBean 5.1 环境准备 5.2 实例工厂实例化 5.3 FactoryBean的使用 六.bean实例化小结 一.环境准备 准备开发环境 创建一个Maven项目 pom.xml添加依赖 resources下添加spring的配置文件applicationContext.xml 最终项目的结构如下: 二.构造方法实例化 在

  • Python selenium 三种等待方式详解(必会)

    很多人在群里问,这个下拉框定位不到.那个弹出框定位不到-各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待.殊不知,你的代码运行速度是什么量级的,而浏览器加载渲染速度又是什么量级的,就好比闪电侠和凹凸曼约好去打怪兽,然后闪电侠打完回来之后问凹凸曼你为啥还在穿鞋没出门?凹凸曼分分中内心一万只羊驼飞过,欺负哥速度慢,哥不跟你玩了,抛个异常撂挑子了. 那么怎么才能照顾到凹凸曼缓慢的加载速度呢?只有一个办法,那就是等喽.说到等,又有三种等法,且听博主一一道来: 1. 强制等待

  • vue路由传参三种基本方式详解

    这篇文章主要介绍了vue路由传参三种基本方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 现有如下场景,点击父组件的li元素跳转到子组件中,并携带参数,便于子组件获取数据. 父组件中: <li v-for="article in articles" @click="getDescribe(article.id)"> methods: 方案一: getDescribe(id) { // 直接调用$r

  • python自动化测试selenium核心技术三种等待方式详解

    目录 1 使用python自带模块time的sleep方式 2 隐式等待(implicitly_wait) 3 显示等待(WebDriverWait) UI自动化测试过程中,可能会出现因测试环境不稳定.网络慢等情况,如果不做任何处理的话,会出现无法定位到特定元素而报错,导致自动化测试无法顺利执行. selenium官网手册:Waits | Selenium slenium自动化测试中,主要涉及三种等待方式: 1 使用python自带模块time的sleep方式 缺点:即使网络条件较好时,依旧按照

  • Android编程中沉浸式状态栏的三种实现方式详解

    本文实例讲述了Android编程中沉浸式状态栏的三种实现方式.分享给大家供大家参考,具体如下: 沉浸式状态栏 Google从android kitkat(Android 4.4)开始,给我们开发者提供了一套能透明的系统ui样式给状态栏和导航栏,这样的话就不用向以前那样每天面对着黑乎乎的上下两条黑栏了,还可以调成跟Activity一样的样式,形成一个完整的主题,和IOS7.0以上系统一样了. 首先看下效果 首先看下第一种方式 系统的方式沉浸式状态栏实现 步奏一 //当系统版本为4.4或者4.4以上

  • oracle中if/else的三种实现方式详解

    1.标准sql规范 1.单个IF IF v=... THEN END IF; 2.IF ... ELSE IF v=... THEN ELSE t....; END IF; 3.多个IF IF v=... THEN ELSIF v=... THEN t...; END IFL 注意: 多个IF的是'ELSIF' 不是 ' ELSE IF' 2.decode函数 DECODE(VALUE,IF1,THEN1,IF2,THEN2,IF2,THEN2,..,ELSE) 表示如果value等于if1时,

  • Django Rest framework三种分页方式详解

    前言 我们数据库有几千万条数据,这些数据需要展示,我们不可能直接从数据库把数据全部读取出来. 因为这样会给内存造成巨大的压力,很容易就会内存溢出,所以我们希望一点一点的取. 同样,展示的时候也是一样的,我们必定会对数据进行分页显示. 本文将详细讲述DRF为我们提供的三种分页方式. 全局配置 REST_FRAMEWORK = { # 对所有分页器生效,但优先级低 'PAGE_SIZE': 5, # 每页显示5条数据 } 我们先准备好用于测试分页的数据以及序列化类 数据表 from django.d

随机推荐