一、IOC原理
1、控制反转(IOC)
将创建管理对象的工作交给容器来做。在容器初始化(或在某个时间节点)通过反射机制创建好对象,在使用时直接从容器中获取。
控制反转:将对象的控制权反过来交给容器管理。
依赖注入(DI):将对象依赖写入配置文件,在创建有依赖关系的对象时,由IOC容器来注入依赖的兑现。构造器注入、setter方法注入。
2、实现原理(流程)
(反射+XML技术)
利用(反射+工厂)技术,根据配置文件中给出的类名生成相应的对象。
Class.forName(className).newInstance。
Tomcat启动Spring容器;
初始化Spring容器,加载application.xml配置文件;
获取扫描包下所有class文件;
解析class中的注解信息;
通过反射实例化相应bean对象,以<beanId,bean>的形式保存集合,存储在IOC容器中。
通过ApplicationContext的getBean方法获取Bean。
3、IOC的好处
创建Bean及其依赖对象的工作交给IOC容器管理,业务代码只需要getBean就行了。将依赖关系写入配置文件中,有修改时,直接修改配置文件即可,而不用去业务代码中每一个使用Bean的地方修改。
4、IOC类型
构造注入:通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖。(对象的依赖关系可在构造函数中完成)。
Setter方法注入:容器通过调用无参构造器或无参static方法实例化bean之后,调用bean的setter方法。
5、IOC的初始化过程
资源定位、资源载入BeanDefinition、<BeanName、BeanDefiniton>注册到IOC容器。
二、AOP(面向切面编程)
1.分离关注点
面向切面编程的目的是分离关注点,通俗的说是指使用 aop 你可以一心关注你的正事,而其他的事交给别人处理
AOP (面向切面编程) 技术利用一种称为 “横切” 的技术,解剖封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,这样就能减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
2.横切关注点
AOP 把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。
比如提供的事务管理机制,事务管理就是一个关注点,你的正事就是去访问数据库(核心关注点),而你不想管事务(横切关注点),所以,Spring 在你访问数据库之前,自动帮你开启事务,当你访问数据库结束之后,自动帮你提交 / 回滚事务!
3.aop采用的技术
一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;
二是采用静态织入的方式,引入特定的语法创建 “方面”,从而使得编译器可以在编译期间织入有关 “方面” 的代码。这里静态织入的原理就是在编译期间,切面直接以字节码形式编译到目标字节码中
三、 DI依赖注入
1、概述
di:依赖注入,表示创建对象,给属性赋值。
2、di的实现有两种
1)在spring的配置文件中, 使用标签和属性完成,叫做基于XML的di实现
2)使用spring中的注解,完成属性赋值, 叫做基于注解的id实现
3、di的语法分类
1)set注入(设置注入): spring调用类的set方法,在set方法可以实现属性的赋值。
2)构造注入,spring调用类的有参数构造方法,创建对象。在构造方法中完成赋值。