一、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 id=”xxxx” class=”xx.XxClass”/>方法配置一个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个值。

最新文章

  1. Access restriction: The type &#39;FileURLConnection&#39; is not API
  2. java学习之接口、多态和内部类
  3. 前端自动构建工具@gulp入门
  4. 获取DataTable选择第一行某一列值
  5. Sales_item
  6. 面试题_31_to_47_JVM 底层与GC(Garbage Collection)的面试问题
  7. Tomcat线程池,更符合大家想象的可扩展线程池
  8. Google maps API开发(二)(转)
  9. Linux下查看显示器输出状态以及修改显示器工作模式(复制 or 扩展)
  10. csu1306: Manor
  11. POJ 2773 Happy 2006(欧几里德算法)
  12. .net core版 文件上传/ 支持批量上传,拖拽以及预览,bootstrap fileinput上传文件
  13. Code::Blocks出现64-Bit mode not compled in解决方法
  14. Calendar 类 案例 和 闰年的计算
  15. This project is not a myeclipse hibernate project . Assuming Hibernate 3 capabilities configuration editor
  16. Laravel 中使用支付宝、银联支付、微信支付进行支付
  17. 【Codeforces 815C】Karen and Supermarket
  18. Servlet----------在使用doGet()和doPost()是如何处理中文乱码
  19. 外键的约束(Mysql、PostgreSQL)
  20. 44(function pointer 2)

热门文章

  1. flask 实现最简单的登录功能
  2. ESXi6.5上的Ubuntu虚机在远程SSH时宕机
  3. Linux 常用操作和命令
  4. TeslaManage 运行日志
  5. Java 枚举使用总结
  6. 怎么又出错了?盘点java中最容易出现的错误
  7. java-统计一段句子中各单词出现的次数
  8. Word2016经常复制公式卡死无响应如何解决?
  9. This view is not constrained, it only has designtime positions, so it will jump to (0,0) unless you
  10. Callable+Future