Spring的两大核心概念:
Spring的IOC(依赖反转注入)和Spring的AOP(面向切面编程)
其中,这两者所处的位置(pic1)
Spring的两大优势:
方便解耦
方便AOP
声明式编程
方便测试
方便集成一些优秀的框架
方便使用JAVAEE的API
Spring的体系架构:
Spring IOC 的作用
耦合,可以理解为依赖关系
包括:
1. 类之间的依赖关系
2. 方法之间的依赖关系
解耦,做到:
编译时不依赖,运行时依赖
方法:
1. 采用反射的方式创建对象,避免使用new关键字
2. 读取配置文件来获得全限定类名
解决方式1 :采用properties配置
首先我们要创建bean对象:
bean对象是什么,怎么做
1. properties 是什么
Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形式来保存属性集。不过Properties有特殊的地方,就是它的键和值都是字符串类型。
2. 怎么用properties配置(https://www.cnblogs.com/xudong-bupt/p/3758136.html)
2.1 初步配置
1)根据x.properties文件load一个Property对象
2)这个Property对象中以键值对的形式存储着你的你想要的类的具体类名
3)用classforName加载
2.2 为了单例模式,把加载过的类储存起来
1)加载一个bean的map类型
2)在静态代码块的时候就把这个map得到
考虑为什么单例是可以的:外部没有需要修改的属性,否则单例在多线程可能会出错
采用IOC如何实现工厂模式
控制反转:一个类把自己创建类的权利交给了另一个框架(工厂)
也就是这个类只能根据名字创建对象,至于创建出来的对象是不是他想要的那一个,其实是无法控制的,这是由配置文件来决定的
具体实现:
上图也是ApplicationContext常用的三个实现类:
ClassPathXmlApplicationContext :加载类路径下的配置文件
FileSystem.... :加载磁盘路径下的配置文件
AnnotationConfig... : 基于注解的配置