资讯专栏INFORMATION COLUMN

Spring 核心 Ioc容器与Bean

qingshanli1988 / 1866人阅读

摘要:多例类型,表示每次从容器中都会获取到一个对应定义全新的实例。仅适用于环境下的,表示每一个生命周期内会有一个多带带的实例,即每一个请求都会拥有一个多带带的实例。将单个定义范围限定为的生命周期。仅在的上下文中有效。

注意我的 Spring 版本是 5.1.2.RELEASE, 并且主要使用注解配置. 如果你需要使用 xml 配置, 我想这篇文章应该不适合你.
IoC容器

IoC就是控制反转, 也叫依赖注入(DI).

比如, 我们现在有 A B 两个类, A 类依赖 B 类在容器在创建 Bean(对象) 的时候, 会注入这些依赖也就是将 B 对象注入到 A 对象中.

依赖注入方式 构造方法注入
private TestService testService;

@Autowired
public ScsController(TestService testService){
    this.testService = testService;
}
通过属性注入
@Autowired
private TestService testService;

不管是根据构造方法注入还是通过属性注入 @Autowired 注解都是必不可少的. @Autowired 注解默认是按照类型进行注入的, 如果没有出现指定类型 Bean 时(TestService Bean) 测可以设置 required=false 表示在用到的时候进行注入.

有些情况下我们可能需要名称进行注入, 可以配合 @Qualifier 注解一起使用.

@Autowired
@Qualifier("testService")
private TestService testService;
Bean

在 Spring 中, bean 是一个由 Spring IoC 容器实例化, 组装和管理的对象.

容器帮我们管理的 Bean 都表示一个 BeanDefinition 对象, 这个对象的主要作用就是帮我们来描述 Bean 的 class 类型、构造函数参数列表、scope、属性、依赖项等等. 当容器注册 Bean 的时候就会使用 BeanDefinitionRegistry 来帮我们进行注册; 当我们如果要从容器中获取一个 Bean 时, 则需要使用 BeanFactory.

也就是说 BeanDefinition 就是用来描述 Bean, BeanDefinitionRegistry 用来注册和管理BeanDefinition, BeanFactory 用来管理 Bean.

要注意的是 BeanFactory 采用延迟初始化策略: 只有当访问容器中的某个对象时, 才对该对象进行初始化和依赖注入操作.

还有一个比它更高级的叫做 ApplicationContext 除了具有 BeanFactory 的所有能力之外, 还提供对事件监听机制以及国际化的支持等.

ApplicationContext 构建在 BeanFactory 上, 并且在容器启动时全部完成初始化和依赖注入操作.
Bean 作用范围(scope)
范围 说明
singleton 这是默认Scope,表示在整个bean容器中或者说是整个应用中只会有一个实例。
prototype 多例类型,表示每次从bean容器中都会获取到一个对应bean定义全新的实例。
request 仅适用于Web环境下的ApplicationContext,表示每一个HttpRequest生命周期内会有一个多带带的实例,即每一个Http请求都会拥有一个多带带的实例。
session 仅适用于Web环境下的ApplicationContext,表示每一个HttpSession生命周期内会有一个多带带的实例,即每一个HttpSession下都会拥有一个多带带的实例,即每一个用户都将拥有一个多带带的实例。
application 仅适用于Web环境下的ApplicationContext,表示在ServletContext生命周期内会拥有一个多带带的实例,即在整个ServletContext环境下只会拥有一个实例。
websocket 将单个bean定义范围限定为WebSocket的生命周期。 仅在Web Spring ApplicationContext的上下文中有效。

可以通过注解 @Scope 进行指定

@Component
@Scope("prototype")
public class Hello {
    
}

如果作用范围是 request session application 则可以使用相应的 @RequestScope @SessionScope @ApplicationScope 注解.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72450.html

相关文章

  • Spring 的基本应用——IoC 和 AOP

    摘要:的两大核心机制是控制反转和面向切面编程,对于初学者来讲,搞清楚这两个核心机制就掌握了的基本应用。配置对象张三添加标签对应属性名,是属性的值。若包含特殊字符,比如张三,使用张三进行配置,如下所示。 前言 对于任何一个 Java 开发人员,Spring 的大名一定如雷贯耳,在行业中可谓是无人不知、无人不晓,说它是 Java 领域第一框架毫不为过。 showImg(https://segme...

    DirtyMind 评论0 收藏0
  • Spring入门看这一篇就够了

    摘要:甲乙交易活动不需要双方见面,避免了双方的互不信任造成交易失败的问题。这就是的核心思想。统一配置,便于修改。带参数的构造函数创建对象首先,就要提供带参数的构造函数接下来,关键是怎么配置文件了。 前言 前面已经学习了Struts2和Hibernate框架了。接下来学习的是Spring框架...本博文主要是引入Spring框架... Spring介绍 Spring诞生: 创建Spring的...

    superw 评论0 收藏0
  • 零基础带你看Spring源码——IOC控制反转

    摘要:依赖注入是向某个类或方法注入一个值,其中所用到的原理就是控制反转。但发现更多时间是在调和的源码。里面就是从中取出这个,完成控制反转的。控制反转的优点最后来以我个人观点谈谈控制反转的优点吧。控制反转为了降低项目耦合,提高延伸性。 本章开始来学习下Spring的源码,看看Spring框架最核心、最常用的功能是怎么实现的。网上介绍Spring,说源码的文章,大多数都是生搬硬推,都是直接看来的...

    wing324 评论0 收藏0
  • Spring框架之我见(三)——IOC、AOP

    摘要:模块负责的所有面向切面的功能。总结的统一管理,降低了对象之间的耦合对主流的框架提供了很好的集成支持提供众多组件,事务管理,等具有高度可开放性,开发者可以自由选择部分或全部主要使用工厂模式和代理模式。 聊完了Spring框架中最重要的两种设计模式,我们来看一下Spring框架的模块和结构图。 Spring框架的结构 下图是Spring官方给出的Spring框架的结构图。 showImg(...

    khs1994 评论0 收藏0
  • 徒手撸框架--实现IoC

    摘要:从而能够进一步深入了解框架。至此我们框架开发完成。虽然说阅读源码是了解框架的最终手段。但是框架作为一个生产框架,为了保证通用和稳定,源码必定是高度抽象,且处理大量细节。下一篇文章应该会是徒手撸框架实现。 原文地址:https://www.xilidou.com/2018/... Spring 作为 J2ee 开发事实上的标准,是每个Java开发人员都需要了解的框架。但是Spring 的...

    rottengeek 评论0 收藏0

发表评论

0条评论

qingshanli1988

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<