Spring随笔5
来源:互联网 发布:手机消毒器 知乎 编辑:程序博客网 时间:2024/06/03 18:14
1、BeanFactory
Bean工厂(com.springframework.beans.factory.BeanFactory)是Spring框架最核心的接口,它提供了高级IOC配置机制。我们一般称BeanFactory为IoC容器,称ApplicationContext为应用上下文。但有时为了行文方便ApplicationContext为Spring容器。
XmlBeanfaceory 通过Resource装载Spring配置信息并启动IOC容器,然后就可以通过BeanFacatory#getBean方法从IoC容器中获取Bean了。通过BeanFacory启动IoC容器时,并不会初始化配置文件中的Bean,初始化发生在第一个调用时,对于单例(singleton)的Bean来说,BeanFactory会缓存Bean实例,第二次用getBean获取Bean时将直接从IoC容器的缓存中获取Bean实例。(该缓存用HashMap实现)。
2、ApplicationContext
ApplicationContext的初始化:
ApplicationContext appctx=newClassPathXMLApplicationContext(”全路径地址”);
3、Bean的生命周期
在Web容器中的Servlet用有明确的生命周期,Spring容器中的Bean也拥有生命周期。Bean的生命周期是由多个特定的生命阶段组成的,每个生命阶段都开出了一扇门,允许外界对Bean施加控制。在spring 中,可以从两个层面定义Bean的生命周期:第一个层面是Bean的作用范围,第二个层面是实例化Bean时所经历的一系列阶段。
3.1BeanFactory中的Bean生命周期
Bean的完整生命周期从Spring容器着手实例化Bean开始,知道最终销毁Bean,这当中经过了许多关键点,每个关键点都涉及特定的方法调用,这些方法大致分为三类:
- Bean自身的方法:电泳Bean构造函数实例化Bean,调用Set设置Bean的属性值以及通过的init-method和destory-method所指定的方法;
- Bean级生命周期接口方法:
- 容器级生命周期接口方法:上图中带☆的接口
3.2ApplicationContext中的Bean生命周期
ApplicationContext和BeanFactory最大的不同之处在于,前者会利用Java反射机制自动识别出配置文件中定义的BeanPostProcessor、InstantiationAwareBeanPostProcessor和BeanFactoryPostProcessor,并自动将它们注册到应用上下文中;而后者需要在代码中通过手动调用addBeanPostProcessor()方法进行注册。所以这是开发中普遍使用ApplicationContext而很少使用BeanFactory的原因之一。
4、面向对象设计6大原则
转自:http://www.cnblogs.com/cavingdeep/archive/2004/10/28/208956.html
OOD基本上有6大原则,而实际上都是互补的,也就是说一些原则需要利用另一些原则来实现自己。6大原则如下:
1) Open-Close Principle(OCP),开-闭原则,讲的是设计要对扩展有好的支持,而对修改要严格限制。这是最重要也是最为抽象的原则,基本上我们所说的Reusable Software既是基于此原则而开发的。其他的原则也是对它的实现提供了路径。
2) Liskov Substituition Principle(LSP),里氏代换原则,很严格的原则,规则是“子类必须能够替换基类,否则不应当设计为其子类。”也就是说,子类只能去扩展基类,而不是隐藏或覆盖基类,如有这方面需要的设计就应当参考以下两种方法替换:
3) Dependence Inversion Principle(DIP),依赖倒换原则,“设计要依赖于抽象而不是具体化”。换句话说就是设计的时候我们要用抽象来思考,而不是一上来就开始划分我需要哪些哪些类,因为这些是具体。这样做有什么好处呢?人的思维本身实际上就是很抽象的,我们分析问题的时候不是一下子就考虑到细节,而是很抽象的将整个问题都构思出来,所以面向抽象设计是符合人的思维的。另外这个原则会很好的支持OCP,面向抽象的设计使我们能够不必太多依赖于实现,这样扩展就成为了可能,这个原则也是另一篇文章《Design by Contract》的基石。
4) Interface Segregation Principle(ISP),“将大的接口打散成多个小接口”,这样做的好处很明显,我不知道有没有必要再继续描述了,为了节省篇幅,实际上我对这些原则只是做了一个小总结,如果有需要更深入了解的话推荐看《Java与模式》,MS MVP的一本巨作!^_^
5) Composition/Aggregation Reuse Principle(CARP),设计者首先应当考虑复合/聚合,而不是继承(因为它很直观,第一印象就是“哦,这个就是OO啊”)。这个就是所谓的“Favor Composition over Inheritance”,在实践中复合/聚合会带来比继承更大的利益,所以要优先考虑。
6) Law of Demeter or Least Knowlegde Principle(LoD or LKP),迪米特法则或最少知识原则,这个原则首次在Demeter系统中得到正式运用,所以定义为迪米特法则。它讲的是“一个对象应当尽可能少的去了解其他对象”。也就是又一个关于如何松耦合(Loosely-Coupled)的法则。
好了,以上是6大原则(或法则)的介绍,对这些原则的深入研究正是如何得到设计模式的道路。
5、小结
控制反转包含两个层面的意思:“控制”是接口实现类的选择控制权;“反转”是指这种选择控制权从调用类转移到外部第三方类或容器的手中。
通过学习java的反射机制,更深入的理解Spring依赖注入。
Spring框架sane最核心的接口:BeanFactory、ApplicationContext和WebApplicationContext,框架中其大部分的类都是围绕它们展开、为它们提供服务和支持。而其中Resource是一个不可忽略的接口,框架通过Resource实现了和具体资源的解耦,不论它们位于何种存储介质中,都可以通过相同的实例返回,和Resource配合的另一个接口是ResourceLoader。
Spring为Bean提供了细致周全的生命周期过程,通过配置方式进行Bean生命周期的控制。
- Spring随笔5
- spring学习随笔5
- spring随笔
- Spring随笔
- spring随笔
- Spring随笔
- spring随笔
- spring随笔
- Spring随笔
- spring MVC 学习随笔 17-5-5
- spring 事务管理 随笔
- spring mvc随笔
- Spring mvc随笔
- spring基础知识随笔
- Spring随笔1
- Spring随笔2
- Spring随笔3
- Spring随笔4
- OpenSSL生成证书
- 第十周--【项目1 - 二叉树算法库】
- 三个文件每行去重且保持原序叠加
- 使用CocoaPods进行第三方资源管理
- 第十周项目3—利用二叉树遍历思想解决问题
- Spring随笔5
- 第九周项目4-广义算法库应用(2)
- js数组去除重复方法添加
- 第十周 项目3-利用二叉树遍历思想解决问题
- Android使用Path绘制相关的图形
- 使用accumulate出现error c 2064错误
- Leetcode134: Sqrt(x)
- 第十周项目1-二叉树算法库
- 清除mysql表中数据