Spring框架学习(四)
2016-03-05 19:02
537 查看
本篇主要对Spring的BeanFactory和ApplicationContext以及FactoryBean进行讲解。
一.BeanFactory与ApplicationContext
所谓控制反转(IOC),就是把原先我们代码里面需要实现的对象创建、依赖的代码,反转给容器来帮忙实现。那么必然的我们需要创建一个容器,同时需要一种描述来让容器知道需要创建的对象与对象的关系。这个描述最具体表现就是我们可配置的文件。
IOC容器最核心的接口是BeanFactory,但是说IOC就是BeanFactory是不正确的,它还有其它的三个接口共同定义了Bean的集合,Bean之间的关系以及Bean的行为,它的作用类似于java的object类,spring bean的创建就是典型的工厂模式。为什么这么说呢,在BeanFactory里,只对IOC容器的基本行为作了定义,根本不关心你的bean是如何定义加载的。正如我们只关心工厂里得到什么产品对象,至于工厂是怎么生产这些对象的,这个基本的接口不关心。
xmlBeanFacory是beanfactory的实现。
ApplicationContext是spring提供的一个高级的IOC容器,它除了能够提供IOC容器的基本功能外,还为用户提供了1.支持信息员,可以实现国际化。2.访问资源。3.支持应用事件。可以这么说,如果BeanFactory是心脏,那么ApplicationContext就是完整的身躯。
二者的不同点:
1.通过BeanFactory启动IOC容器时,并不会初始化配置文件中定义的bean。初始化动作发生在第一个调用时,对于单实例(singleton)的Bean来说,BeanFactory会缓存Bean实例,所以第二次使用getBean()获取Bean时,将直接从IOC容器的缓存中获取Bean实例。
ApplicationContext在初始化应用上下文时就实例化所有单实例的bean,因此ApplicationContext的初始化时间会比BeanFactory稍长一些,不过稍后的调用则没有“第一次惩罚”的问题。
2.(博主摘抄自网络,并未接触过)BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但两者之间的区别是:BeanFactory需要手动注册,而ApplicationContext则是自动注册
3.BeanFactory有实现类XmlBeanFactory,ApplicationContext有实现类ClassPathXmlApplicationContext(配置文件放置在类路径下),FileSystemXmlApplicationContext实现类
二者的共同点与联系:
1.二者都是接口,ApplicationContext由BeanFactory派生而来,提供了更多面向实际应用的功能。
二.BeanFactory与FactoryBean
BeanFactory:以Factory结尾,表示它是一个工厂类,是用于管理Bean的一个工厂
FacotryBean:以Bean结尾,表示它是一个Bean,不同于普通Bean的是:它是实现了FactoryBean<T>接口的Bean,根据该Bean的id从BeanFactory中获取的实际上是FactoryBean的getObject()返回的对象,而不是FacoryBean本身,如果要获取FactoryBean对象,可以在id前面加一个&符号来获取。可以这么所,这个Bean不是简单的Bean,而是一个能生产或者修饰对象生成的工厂Bean,它的实现与设计模式的工厂模式和修饰器模式类似。
为了便于理解,下面是我用java代码生成的工厂模式:
输出:
说中国话
speak english
一.BeanFactory与ApplicationContext
所谓控制反转(IOC),就是把原先我们代码里面需要实现的对象创建、依赖的代码,反转给容器来帮忙实现。那么必然的我们需要创建一个容器,同时需要一种描述来让容器知道需要创建的对象与对象的关系。这个描述最具体表现就是我们可配置的文件。
IOC容器最核心的接口是BeanFactory,但是说IOC就是BeanFactory是不正确的,它还有其它的三个接口共同定义了Bean的集合,Bean之间的关系以及Bean的行为,它的作用类似于java的object类,spring bean的创建就是典型的工厂模式。为什么这么说呢,在BeanFactory里,只对IOC容器的基本行为作了定义,根本不关心你的bean是如何定义加载的。正如我们只关心工厂里得到什么产品对象,至于工厂是怎么生产这些对象的,这个基本的接口不关心。
xmlBeanFacory是beanfactory的实现。
ApplicationContext是spring提供的一个高级的IOC容器,它除了能够提供IOC容器的基本功能外,还为用户提供了1.支持信息员,可以实现国际化。2.访问资源。3.支持应用事件。可以这么说,如果BeanFactory是心脏,那么ApplicationContext就是完整的身躯。
二者的不同点:
1.通过BeanFactory启动IOC容器时,并不会初始化配置文件中定义的bean。初始化动作发生在第一个调用时,对于单实例(singleton)的Bean来说,BeanFactory会缓存Bean实例,所以第二次使用getBean()获取Bean时,将直接从IOC容器的缓存中获取Bean实例。
ApplicationContext在初始化应用上下文时就实例化所有单实例的bean,因此ApplicationContext的初始化时间会比BeanFactory稍长一些,不过稍后的调用则没有“第一次惩罚”的问题。
2.(博主摘抄自网络,并未接触过)BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但两者之间的区别是:BeanFactory需要手动注册,而ApplicationContext则是自动注册
3.BeanFactory有实现类XmlBeanFactory,ApplicationContext有实现类ClassPathXmlApplicationContext(配置文件放置在类路径下),FileSystemXmlApplicationContext实现类
二者的共同点与联系:
1.二者都是接口,ApplicationContext由BeanFactory派生而来,提供了更多面向实际应用的功能。
二.BeanFactory与FactoryBean
BeanFactory:以Factory结尾,表示它是一个工厂类,是用于管理Bean的一个工厂
FacotryBean:以Bean结尾,表示它是一个Bean,不同于普通Bean的是:它是实现了FactoryBean<T>接口的Bean,根据该Bean的id从BeanFactory中获取的实际上是FactoryBean的getObject()返回的对象,而不是FacoryBean本身,如果要获取FactoryBean对象,可以在id前面加一个&符号来获取。可以这么所,这个Bean不是简单的Bean,而是一个能生产或者修饰对象生成的工厂Bean,它的实现与设计模式的工厂模式和修饰器模式类似。
为了便于理解,下面是我用java代码生成的工厂模式:
package factoryPattern; public interface A { public void say(); }
public class B implements A { @Override public void say() { // TODO Auto-generated method stub System.out.println("说中国话"); } }
package factoryPattern; public class C implements A { @Override public void say() { // TODO Auto-generated method stub System.out.print("speak english"); } }
package factoryPattern; public class Factory { public static A create(int type){ A a = null; if(type==1){ a= new B(); }else if(type==2){ a= new C(); } return a; } }
package factoryPattern; public class test { public static void main(String[] args) { // TODO Auto-generated method stub A a=Factory.create(1); a.say(); A b=Factory.create(2); b.say(); } }
输出:
说中国话
speak english
相关文章推荐
- java-servlet-jsp
- 注解(Annotation)
- OverView of Spring Framework(综述Spring框架)
- Spring配置错误java.lang.NoClassDefFoundError: org/springframework/jdbc/datasource/TransactionAwareDataS
- java.lang.NoSuchMethodException:com.yxq.action.AdminAction.addGoods()《转载》
- 关于java访问权限修饰词
- java动态代理
- Java Nio 九、Java NIO SocketChannel
- OpenCASCADE Ring Type Spring Modeling
- 用Javac控制台创建 Package
- Hibernate一对多关系映射
- SPRING IN ACTION 第4版笔记-第七章Advanced Spring MVC-004- 处理上传文件
- Spring核心IOC容器实现分析
- spring mvc使用Maven配置Velocity
- Java第一周学习总结5311
- Java中接口式的匿名内部类的构造方法
- 初学java --最基础几个快捷键
- Java调用WebService接口实现发送手机短信验证码功能
- 编写一个JAVA程序,创建指定长度的 int 型数组,并生成 100 以内随机数为数组中的每个元素赋值,然后输出数组
- (转)SSM框架——整合教程(Spring+SpringMVC+MyBatis)