什么是spring呢?
spring是分层的(controller,service等都可以应用),full-statck(全栈)的轻量级开源框架,以Ioc和Aop为内核,提供了展现层springmvc和业务层事务管理等众多的企业级应用技术,还能整合开源世界的众多第三方优秀的框架,已成为使用最多的JavaEE企业级开源框架
spring框架优势
1.方便解耦
2.方便测试
3.能够整合第三方框架
4.使用Aop
5.使得业务层和事务管理能够分开
6.更好的调用JavaEE的Api
7.源码优秀
spring-framework和jdk版本的对应关系
jdk8+ -> spring-framework 5.x
jdk6+ ->spring-framework 4.x
jdk5+ ->spring-framework 3.x
IOC
1.Ioc是什么呢:
控制反转
2.干什么的嘞:
就是我们如果在类A中想引入类B,那么需要new一个B,但是有了IOC,那么我们就是把创建对象和管理的权利都交给了B,我们就无须再管这部分了
图示:
3.解决的问题:
解耦
4.与DI的区别:
Ioc和DI描述的事情其实是同一个事情,只是站在的角度不同
那么描述的是什么事情呢:
对象的实例化以及依赖关系维护的事情
Ioc是站在对象的角度,对象实例化以及管理的权利全部交给容器
DI是站在容器的角度,当A实例化并依赖于B时,则容器将A所需要依赖的对象都注入给A
AOP
1.什么是AOP
面向切面编程,AOP是OOP的延续,而OOP的三大特征为封装,多态和继承
2.OOP
OOP是一种垂直的继承体系,子类继承顶级父类,子类又作为父类,被下面的子类继承,是一种一脉相承的状态,所以是垂直继承体系。
OOP编程可以解决大部分代码重复的问题,但是如果多个方法的相同位置出现同一代码,这种横向代码重复的问题是无法解决的
所以AOP便出现了
3.AOP解决问题:
在不改变原有业务逻辑的情况下,增强横切逻辑代码,根本上解耦,避免横切逻辑代码重复问题
4.什么是面向切面编程呢,也就是AOP到底是什么呢:
切:横切逻辑,我们不动业务代码,只是操作横切逻辑代码
面:横切逻辑代码往往影响多个方法,每个方法都如一个点,多点构成面
5.横切逻辑应用场景:
事务的管理,日志,以及权限管理等等
思考的问题(解耦方面):
除了new可以实例化对象,还有什么技术可以实例化对象吗?
1.反射 Class.forName("全限定名"),可以把全限定名配置到xml中
之前在公司比较老的项目中看见过这种形式的实例化对象,先写service相关信息,然后将service依赖的dao也配置进来,才能实现引用
2.使用工厂来通过反射技术生产对象,工厂模式是解耦合非常好的一种方式