Spring是一个IOC(DI)和AOP容器框架,并且是开源的。

1.IOC和DI

比较官方的说法:

•IOC(Inversion of Control):其思想是反转资源获取的方向. 传统的资源查找方式要求组件向容器发起请求查找资源. 作为回应, 容器适时的返回资源. 而应用了 IOC 之后, 则是容器主动地将资源推送给它所管理的组件, 组件所要做的仅是选择一种合适的方式来接受资源. 这种行为也被称为查找的被动形式。

•DI(Dependency Injection) — IOC 的另一种表述方式:即组件以一些预先定义好的方式(例如: setter 方法)接受来自如容器的资源注入. 相对于 IOC 而言,这种表述更直接。

我的理解:

  • IOC:控制反转,反转资源获取的方向。 只是一种设计思想,意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。

public class HelloWorld {
private String name; public void setName(String name) {
this.name = name;
} public void hello(){
System.out.println("hello: " + this.name);
}
} // 传统
// 1.创建一个HelloWorld对象
HelloWorld helloWorld = new HelloWorld();
// 2.对象进行赋值
helloWorld.setName("张三");
// 3.调用方法
helloWorld.hello(); // Spring
// 1.创建Spring的IOC容器对象
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// 2.从IOC实例中获取Bean实例
HelloWorld helloWorld = (HelloWorld)context.getBean("helloWorld", HelloWorld.class);
// 3.调用方法
helloWorld.hello();
  • DI:依赖注入,依赖用容器把资源注入

2.IOC 容器 BeanFactory & ApplicationContext 概述

  • ApplicationContext代表IOC容器,是一个接口,也可以使用BeanFactory来创建IOC容器,不过常用ApplicationContext。

  • ApplicationContext的主要实现类:

    • ClassPathXmlApplicationContext:从类路径(src)下加载配置文件,也可以自己指定,但需要全类名

    • FileSystemXmlApplicationContext:从文件系统中加载配置文件

    • ConfigurableApplicationContext 扩展于 ApplicationContext,新增加两个主要方法:refresh() 和 close(), 让 ApplicationContext 具有启动、刷新和关闭上下文的能力(这个先了解,后面再学)

    • ApplicationContext在初始化上下文时就实例化所有单例的Bean

  • ApplicationContext的方法

    • getBean():从IOC容器中获取Bean,该方法是父接口(BeanFactory)的方法

      • 是一个重载方法,可由如下创建

      • 不推荐使用该方法,要是有多个相同类型的Bean,就不知道要获取哪一个实例

最新文章

  1. Tomcat 解压版安装
  2. [poj2182] Lost Cows (线段树)
  3. ajax请求node.js接口时出现 No 'Access-Control-Allow-Origin' header is present on the requested resource错误
  4. 各种数据处理方案(SQL,NoSQL,其他)的应用场景
  5. Ubuntu下VIM(GVIM)环境配置
  6. Unicode(UTF-8, UTF-16)令人混淆的概念
  7. memset功能的具体说明
  8. Java 内部类和匿名内部类
  9. js jquery 遍历 for,while,each,map,grep
  10. Loadrunner加密算法脚本与token作为get请求url上的参数处理
  11. ORACLE多表关联UPDATE 语句[z]
  12. for和while循环的区别
  13. (zhuan) 大牛讲堂 | 算法工程师入门第二期-穆黎森讲增强学习
  14. curl 与wget的区别
  15. [LeetCode] All questions numbers conclusion 所有题目题号
  16. Ubuntu:替换DASH图标
  17. Day15 集合(二)
  18. JS的强制类型转换
  19. HDU4666+POJ2926【最远曼哈顿距离】
  20. KVO的用法、底层实现原理

热门文章

  1. JS+CSS - table 表格固定表头和第一列、内容可滚动 (转载)
  2. crmv2项目
  3. Java对象序列化输入输出
  4. OIer常见问题与错误总结
  5. 学术Essay写作如何体现逻辑的应用
  6. 吴裕雄--天生自然C++语言学习笔记:C++ 基本的输入输出
  7. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-adjust
  8. kafka 相关命令 偏移重置
  9. vue学习(九)对象变更检测注意事项
  10. java List的用法