Spring
Spring 是个 java 企业级应用的开源开发框架。Spring 主要用来开发 Java 应用,
但是有些扩展是针对构建 J2EE 平台的 web 应用。Spring 框架目标是简化 Java
企业级应用开发,并通过 POJO 为基础的编程模型促进良好的编程习惯。
IOC
IOC是什么
IOC控制反转是指将原来需要程序员来进行的对象创建,对象属性赋值(依赖)的控制权反转给IOC容器来实现,并且管理这些对象的整个生命周期。需要创建一个容器并且让容器知道创建对象之间的关系,在Spring当中就是通过IOC容器来实现的。
IOC的实现方式有依赖注入与依赖查找,依赖查找用的比较少。
依赖注入是指对象被动的接受依赖类而不用自己去查找,对象不是从容器中查找他依赖的类,而是在对象实例化时主动将它依赖的类注入给它。
IOC容器的初始化过程
IOC的初始化是通过refresh()方法来启动的,并使用不同的模块来完成,ResourceLoader,BeanDefinition等,主要包过三个过程,每个过程又通过调用不同的接口来完成
Resource定位过程:
Resuorce定位是指beanDefinition的资源定位,由ResourceLoader通过统一的Resource接口来完成,这个Resource对各种形式的beanDefinition都提供了统一的接口,类似于容器寻找数据的过程。BeanDefinition的载入:
BeanDefinition的载入过程是指将用户定义好的Bean表示为容器内部的数据结构,也就是BeanDefinition。java对象在容器中的抽象就是BeanDefinition。向容器注入BeanDefinition
向容器注入BeanDefinition这个过程示通过BeanDefinitionRegistry接口来完成的,就是将载入过程中的BeanDefinition来向IOC容器注册。
依赖注入的实现方式
有三种方式 构造方法注入 setter方法注入 接口注入
依赖注入的相关注解
@AutoWired:自动按类型注入,有多个匹配则按照指定Bean的id查找,找不到会报错;
@Qualifier 在自动按类型注入的基础上再按照Bean的id查找,给变量注入必须搭配@Autowired,如果是方法则不用;
@Bean 直接按照Bean的id注入,只能注入Bean;
@Value 用于注入基本数据类型和String类型。
依赖注入的过程
Bean的生命周期
Bean生命周期主要有四个阶段 实例化 属性赋值 初始化 销毁
实例化:
Bean的实例化有两种情况 BeanFactory在使用Bean时才会实例化Bean,ApplicationContext管理的Bean在容器初始化时就会完成Bean的初始化,默认Bean是单例(sinlgeton);
属性赋值:
为Bean设置相关属性和依赖(依赖注入)
△△△初始化:
在初始化前需要 检查Aware的相关接口并设置相关依赖 ,使用BeanPostProcessor进行前置处理,然后进行初始化,初始化完成后,要再使用BeanPostProssor进行后置处理。
销毁:
首先需要先注册Destruction相关回调接口,要销毁的时候有两种方法,如果Bean实现了DisposableBean接口,则spring将调用destory()方法,如果Bean是用来destory-method 属性声明了销毁方法,则该方法被调用。
,
tips:
Spring的依赖注入最大亮点就是所有的Bean对Spring容器的存在是没有意识的。但是在实际项目中,我们有时不可避免的要用到Spring容器本身提供的资源,这时候要让 Bean主动意识到Spring容器的存在,才能调用Spring所提供的资源,这就是Spring的Aware接口,Aware接口是个标记接口,标记这一类接口是用来“感知”属性的,Aware的众多子接口则是表征了具体要“感知”什么属性
Bean的作用域
目前Bean的作用域有五种
这里是引用
AOP
AOP是什么
AOP面向切面编程,就是将代码中重复的部分抽离,在需要调用的时候通过JDK动态代理技术,在不修改源码的基础上对方法进行增强。