Spring
1 Spring简介
1.1 优点
(1)方便解耦,简化开发
(2)Aop 编程支持
(3)方便程序测试
(4)方便和其他框架进行整合
(5)方便进行事务操作
(6)降低 API 开发难度
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。
1.2 Spring有两个核心部分
(1)IOC:控制反转,把创建对象过程交给 Spring 进行管理
(2)Aop:面向切面,不修改源代码进行功能增强
2 IOC
2.1 概念和原理
2.2.1、什么是 IOC
(1)控制反转,把对象创建和对象之间的调用过程,交给 Spring 进行管理
(2)使用 IOC 目的:为了耦合度降低
2.1.2、IOC 底层原理
(1)xml 解析、工厂模式、反射: 可以把IoC模式看作工厂模式的升华,把IoC容器看作是一个大工厂,只不过这个大工厂里要生成的对象都是在XML文件中给出定义的。利用Java 的“反射”编程,根据XML中给出的类定义生成相应的对象。从实现来看,以前在工厂模式里写死了的对象,IoC模式改为配置XML文件,这就把工厂和要生成的对象两者隔离,极大提高了灵活性和可维护性。
2.1.3、画图讲解 IOC 底层原理
2.1.4、IOC容器
IOC 思想基于 IOC 容器完成,IOC 容器底层就是对象工厂
-
BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化。这样,我们就不能发现一些存在的Spring的配置问题。如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用调用getBean方法才会抛出异常。(延迟加载)
加载配置文件时候不会创建对象,在获取对象(使用)才去创建对象 -
ApplicationContext,它是在容器启动时,一次性创建了所有的Bean。这样,在容器启动时,我们就可以发现Spring中存在的配置错误,这样有利于检查所依赖属性是否注入。 ApplicationContext启动后预载入所有的单实例Bean,通过预载入单实例bean ,确保当你需要的时候,你就不用等待,因为它们已经创建好了。
加载配置文件时候就会把在配置文件对象进行创建
形象的说
如果说BeanFactory是Spring的心脏,那么ApplicationContext就是完整的身躯了。
ApplicationContext 接口有实现类:
2.2 自动注解
@Resource和@Autowired注解都是用来实现依赖注入的。
只是@AutoWried按by type自动注入,和@qualifier搭配使用,如果controller有俩个实现service,用qualifier指定,默认按类名注入
而@Resource默认按byName自动注入,如果没有匹配则通过byType注入。
3.AOP
AOP的底层机制就是动态代理,不改变原来的代码的情况下,实现了对原有功能的增强
动态代理的代理类是动态生成的 . 静态代理的代理类是我们提前写好的
动态代理分为两类 : 一类是基于接口动态代理 , 一类是基于类的动态代理
基于接口的动态代理----JDK动态代理
基于类的动态代理–cglib