Spring框架的主要功能是通过其核心容器来实现的。Spring提供了2种核心容器:BeanFactory、ApplicationContext。

BeanFactory

BeanFactory是一个管理Bean的工厂,主要负责初始化各种Bean,并调用它们的声明周期方法。

BeanFactory由BeanFactory接口定义。BeanFactory接口的常用实现类:XmlBeanFactory类。

创建一个BeanFactory的实例:

   Resource resource=new FileSystemResource("D:/test/src/applicationContext.xml");
    BeanFactory beanFactory=new XmlBeanFactory(resource);

创建一个Spring容器,并使用xml配置文件来初始化容器。参数是Resource类型,指定容器的配置文件。

因为要使用绝对路径,不方便程序移植,不推荐使用。

ApplicationContext

ApplicationContext是BeanFactory的子接口,被称为应用上下文。除了有BeanFactory的全部功能,还提供了对国际化、资源访问、事件传播等的支持,经常用这个。

ApplicationContext接口有2个常用的实现类:

  • ClassPathXmlApplicationContext类    //使用相对路径,最常用,推荐
  • FileSystemXmlApplicationContext类    //使用绝对路径,不推荐

创建示例:

   ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
   FileSystemXmlApplicationContext applicationContext=new FileSystemXmlApplicationContext("D:/test/src/applicationContext.xml");

BeanFactory和ApplicationContext都是通过xml配置文件加载Bean的,二者的主要区别:

  • BeanFactory:如果Bean的某个属性没有注入,使用getBean()方法时会抛出异常
  • ApplicationContext:在创建容器时会自检,检查Bean所依赖的属性是否注入。

一般都是优先选择使用ApplicationContext,资源较少时才考虑使用BeanFactory。

创建Spring容器后,就可以获取容器中的Bean了:

  • Object  getBean(String  name)    //通过Bean的id或者name来获取Bean,返回值是Object类型,需要强制类型转换
  • <T>  getBean(String name, Class<T>  requiredType)   //第二个参数指定该Bean的类,这样返回值就是该类型的,不必转换类型。

最新文章

  1. h5移动版云胶片系统
  2. NSFileHandle
  3. Mac Pro 安装 Homebrew 软件包管理工具
  4. Hive(六):HQL DDL
  5. 【转载】使用Axure制作App原型怎样设置尺寸?
  6. [C和指针] rearrange.c
  7. android81 多线程下载和断电续传
  8. CH Round #53 -GCD Path
  9. python使用deque实现fifo(先进先出)
  10. 2014年1月24日 Oracle 连接查询与子查询
  11. 监测scroll
  12. Bash shell 的算术运算有四种方式
  13. Numpy学习三:数组运算
  14. python中利用上下文管理器来实现mysql数据库的封装
  15. httpput
  16. 使用 GCD 实现倒计时效果
  17. Flutter 第一次运行就出现白屏的问题
  18. Android开发 ---Fragment片段布局
  19. 在IDEA中修改项目的名称
  20. linux c 编程 ------ 获取时间,计算程序执行时间

热门文章

  1. javascript常用方法 - String
  2. fiddler抓包详解
  3. Python爬取视频指南
  4. {Redis}NOAUTH Authentication required. Linux.cenOS
  5. python os.popen(&#39;xxx.py&#39;) 遇到的坑 (No Child Processes)
  6. mybatis一级二级缓存
  7. Install Teamviewer on 14.04? [repost]
  8. autocomplete undefined一例解决办法
  9. 有些CCS工程中为什么会有两个CMD文件?
  10. python笔记:删除列表元素和根据索引查找元素