当前位置: 首页 > news >正文

Spring学习之Bean详解


一、理解反向控制(IOC)

依赖注入(di):比IOC更好的名字。获得依赖对象的方式反转了。

IOC应用:ioc或者说di,还可以达到解耦的目的

二、装配Bean

(1)容纳你的bean

bean工厂:最简单的容器,提供了基础的依赖 注入支持。

创建各种类型的Bean.应用上下文(ApplicationContext):建立在bean工厂基础之上,提供系统架构服务。

<span style="font-size:14px;"><bean scope=“singleton|prototype|request|session” /> 
singleton: 单例 默认值
prototype: 原型  
request: 一次请求有效( java web开发中)
session: session级有效(java web开发中)
</span>

(2)工厂设计模式

创建分发各种bean。配置好它们之间的写作关系,参与bean的生命周期。

BeanFactory factory = new XmlBeanFactory(
	new ClassPathResource("applicationContext.xml"));
bean工厂只把bean的定义信息载进来,用到的时候才实例化。
factory.getBean("mybean");就可得到一个bean。

(3)使用应用上下文

ApplicationCotext,spring更加高级的容器。功能强大:

1.提供文本信息解析工具,包括对国际化支持。

2.提供载入文件资源的通用方法,如图片。

3.可以向注册为监听器的bean发送事件。

在很少的情况下,使用BeanFactory,如在移动设备。


三种经常用到的实现:

<span style="font-size:14px;">1.ClassPathXmlApplicationContext:从类路径中加载。
2.FileSystemXmlApplicationContext:从文件系统加载。
3.XmlWebApplicationContext:从web系统中加载。
ApplicationContext context = new FileSystemXmlApplicationContext(" c:\foo.xml");
ApplicationContext context = new ClassPathXmlApplicationContext("foo.xml");</span>
除了应用上下文提供的附加功能外,应用上下文与bean工厂的另一个重要区别是关于单例bean如何被加载。

bean工厂延迟加载所有bean,直到getBean()方法被调用。

应用上下文会(applicationContext)在启动后预载入所有单例bean.这样可确保应用不需要等待他们被创建。

(4)bean的生命周期  

bean被载入到容器中时,他的生命周期就开始了。:


1.容器寻找bean的定义信息并实例化。

2.使用依赖注入,spring按bean定义信息配置bean的所有属性。

3.若bean实现了BeanNameAware接口,工厂调用Bean的setBeanName()方法传递bean的ID。

4.若bean实现了BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂自身。

5.若BeanPostProcessor(bean后置处理器)和bean关联,则它们的 postProcessBeforeInitialization()方法被调用。 [过滤器举例理解]

6.若bean指定了ini-method方法、,它将被调用。

7.最后,若有BeanPostProcessor和bean关联,则它们的  postProcessAfterInitialization()方法被调用。

将bean从工厂中删掉有两种方法:

1.若bean实现了DisposableBean接口, distroy()方法被调用。

2.如果指定了定制的销毁方法,就调用这个方法。






相关文章:

  • Android ActivityThread
  • Spring中使用Map、Set、List、数组、属性集合的注入方法配置文件
  • 设计模式-23种参考模式
  • Spring中继承配置的注入方法
  • Spring控制反转和依赖注入
  • springMVC框架搭建流程
  • 四舍五入的方法
  • Java代码生成二维码图片
  • 2.Cocos2dx 3.2重力系统Box2D
  • Ubuntu下安装C/C++开发环境【!!!有更新!!!Ubuntu14.10下使用eclipse搭建C语言开发环境】
  • 翻译一篇文章:It's Difficult to Grow a Test Developer(成为测试开发工程师的艰辛)...
  • Spring的核心机制:依赖注入
  • Spring获取ApplicationContext对象工具类
  • linux基础学习8
  • Ubuntu系统更新命令笔记
  • SegmentFault for Android 3.0 发布
  • angular2开源库收集
  • JavaScript 基本功--面试宝典
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • LintCode 31. partitionArray 数组划分
  • maya建模与骨骼动画快速实现人工鱼
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Python爬虫--- 1.3 BS4库的解析器
  • React-生命周期杂记
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 世界上最简单的无等待算法(getAndIncrement)
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 如何正确理解,内页权重高于首页?
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #NOIP 2014# day.1 T2 联合权值
  • #Z2294. 打印树的直径
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (四)模仿学习-完成后台管理页面查询
  • (一)基于IDEA的JAVA基础10
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • ./configure,make,make install的作用(转)
  • .NET Core 版本不支持的问题
  • .NET 解决重复提交问题
  • .net反编译工具
  • .net和jar包windows服务部署
  • .NET企业级应用架构设计系列之结尾篇
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .NET学习全景图
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • [ Linux ] git工具的基本使用(仓库的构建,提交)
  • []新浪博客如何插入代码(其他博客应该也可以)