一、Bean的定义

<beans…/>元素是Spring配置文件的根元素,<beans…/>元素可以包含多个<bean…/>子元素,每个<bean…/>元素可以定义一个Bean实例,每一个Bean对应Spring容器里的一个Java实例定义Bean时通常需要指定两个属性。

Id:确定该Bean的唯一标识符,容器对Bean管理、访问、以及该Bean的依赖关系,都通过该属性完成。Bean的id属性在Spring容器中是唯一的。

Class:指定该Bean的具体实现类。注意这里不能使接口。通常情况下,Spring会直接使用new关键字创建该Bean的实例,因此,这里必须提供Bean实现类的类名。

Spring容器集中管理Bean的实例化,Bean实例可以通过BeanFactory的getBean(String beanid)方法得到。BeanFactory是一个工厂,程序只需要获取BeanFactory引用,即可获得Spring容器管理全部实例的引用。程序不需要与具体实例的实现过程耦合。大部分Java EE应用里,应用在启动时,会自动创建Spring容器,组件之间直接以依赖注入的方式耦合,甚至无须主动访问Spring容器本身。

当我们在配置文件中通过方法配置一个Bean时,这样就需要该Bean实现类中必须有一个无参构造器。

二、容器中Bean的作用域

当通过Spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域。

Spring支持5种作用域:

Singleton:单例模式。在整个SpringIoC容器中,使用singleton定义的Bean将只有一个实例,这是默认的配置。
Prototype:原型模式。每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例。
request:对于每次HTTP请求,使用request定义的Bean都将产生一个新的实例,即每次HTTP请求都会产生不同的Bean实例。当然只有在WEB应用中使用Spring时,该作用域才真正有效。
session:对于每次HTTPSession,使用session定义的Bean都将产生一个新的实例时,即每次HTTP Session都将产生不同的Bean实例。同HTTP一样,只有在WEB应用才会有效。
global session:每个全局的HTTPSession对应一个Bean实例。仅在portlet Context的时候才有效。
比较常用的singleton和prototype。如果一个Bean实例被设置为singleton,那么每次请求该Bean时都会获得相同的实例。容器负责跟踪Bean实例的状态,负责维护Bean实例的生命周期行为。如果一个Bean实例被设置为prototype,那么每次请求该di的Bean,Spring都会创建一个新的Bean实例返回给程序,在这种情况下,Spring容器仅仅使用new关键字创建Bean实例,一旦创建成功,容器将不会再跟踪实例,也不会维护Bean实例的状态。
如果我们不指定Bean的作用域,则Spring会默认使用singleton作用域。设置Bean的作用域是通过scope属性来指定。可以接受Singleton、prototype、request、session、global session 5个值。

Spring中Bean的概念相关推荐

  1. 如果你每次面试前都要去背一篇Spring中Bean的生命周期,请看完这篇文章

    前言 当你准备去复习Spring中Bean的生命周期的时候,这个时候你开始上网找资料,很大概率会看到下面这张图: 先不论这张图上是否全面,但是就说这张图吧,你是不是背了又忘,忘了又背? 究其原因在于, ...

  2. (十)Spring中Bean的生命周期(下)

    Spring官网阅读(十)Spring中Bean的生命周期(下) 在上篇文章中,我们已经对Bean的生命周期做了简单的介绍,主要介绍了整个生命周期中的初始化阶段以及基于容器启动停止时LifeCycle ...

  3. Spring中bean标签的属性和值:

    Spring中bean标签的属性和值: <bean name="user" class="com.pojo.User" init-method=" ...

  4. Spring 中 Bean 的生命周期

    本文作者: 伯乐在线 - yemengying 智商捉鸡?,实在没办法一下子理解Spring IoC和AOP的实现原理,看的闹心也不太懂,所以...决定拆成小的不能在小的一个个问题,一点点啃.今天先来 ...

  5. (转)Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别

    Spring中Bean的命名 1.每个Bean可以有一个id属性,并可以根据该id在IoC容器中查找该Bean,该id属性值必须在IoC容器中唯一: 2.可以不指定id属性,只指定全限定类名,如: & ...

  6. Spring中Bean创建完成后执行指定代码的几种实现方式

    Spring中Bean创建完成后执行指定代码的几种实现方式 1. 实现ApplicationListener接口 2. 实现InitializingBean接口 3. 使用@PostConstruct ...

  7. Spring中Bean的生命周期是怎样的?

    对于普通的Java对象,当new的时候创建对象,当它没有任何引用的时候被垃圾回收机制回收.而由Spring IoC容器托管的对象,它们的生命周期完全由容器控制.Spring中每个Bean的生命周期如下 ...

  8. 厉害了,Spring中bean的12种定义方法!

    前言 在庞大的java体系中,spring有着举足轻重的地位,它给每位开发者带来了极大的便利和惊喜.我们都知道spring是创建和管理bean的工厂,它提供了多种定义bean的方式,能够满足我们日常工 ...

  9. 面试问题:Spring中Bean 的生命周期

    Spring Bean生命周期执行流程 在传统的 Java 应用中,Bean 的生命周期很简单,使用关键字 new 实例化 Bean,当不需要该 Bean 时,由 Java 自动进行垃圾回收. Spr ...

最新文章

  1. pygame简单的俄罗斯方块游戏和简单的打字游戏
  2. WindowManager.LayoutParams类22
  3. 【组合数学】生成函数 ( 性质总结 | 重要的生成函数 ) ★
  4. 双线性内插怎么缩小_汗蒸桶怎么选择才是最好的
  5. WIN8将IE设置为默认浏览器
  6. 关于虚拟机下linux共享Windows文件的解决方案
  7. JAVA逆向反混淆-追查Burpsuite的破解原理
  8. Java 开发常用资源
  9. Xshell4 注册码 ,Xftp4 注册码
  10. Cocos2d-lua中lua代码加密成luac
  11. Android Studio基础-Activity生命周期与多个Activity跳转
  12. 指定条件查找计算机,Excel函数教程: 查找符合指定条件的数据-excel技巧-电脑技巧收藏家...
  13. 麒麟 mips mysql_中标麒麟(龙芯CPU)--docker基础镜像制作
  14. 设计模式四:用一个生产手机的简单例子说清楚工厂模式
  15. x86 单线并发多拨_单线多拨软路由。真正打破网络限速,飙升网速的秘诀
  16. Linux学习笔记 驱动开发篇
  17. Excel怎样从一串字符中的某个指定“字符”前后截取字符及截取字符串常用函数...
  18. 你如何看待重仓、轻仓、空仓(DBEx平台招商代理)
  19. python 文字转表格 openpyxl
  20. win7系统不能保存文档到服务器,win7系统正确配置服务器

热门文章

  1. 修改pytho2安装插件的位置_office2016自定义安装以及修改安装位置
  2. java jolt tuxedo_java使用jolt调用tuxedo服务
  3. mtk一键usb驱动_三菱MRJEB驱动器报错,导致报错原因37.1参数设置范围异常?
  4. pb9数据窗口中显示行数据与当前行区别_Hive的窗口函数
  5. php自动运维,运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统(五)
  6. ASP.NET Core Web 应用程序开发期间部署到IIS自定义主机域名并附加到进程调试
  7. Java生鲜电商平台-SpringCloud微服务架构中分布式事务解决方案
  8. innodb_locks_unsafe_for_binlog分析
  9. 在springBoot中配置web.xml中配置的servlet
  10. SDOI2010 地精部落