1、什么是spring?
刷到的小伙伴直接看链接就可以了
文章仅作为自己学习的记录。
spring是一个简化java企业级开发的一个框架,包含了很多技术:
三个核心概念:AOP 、 IOC 、DI ,其他的技术都是依靠这三个核心技术建立起来的
1、AOP(面向切面编程)
2、IOC(控制反转)
3、DI(依赖注入)
4、spring事务管理
以及spring集成的其他框架(springmvc、springboot、springcloud)等等。
自己创建一个boot项目,然后运行,会发现我们只需要写一个类的业务,其他的一些比如创建servlet、通过response将数据以json格式输出、配置web.xml、发布项目到tomcat、启动tomcat等这些操作,在springboot内部就已经帮我们实现了,对于开发者来说这些都被隐藏了。
springboot让我们更关注业务代码的实现,从而最大限度的帮我们提升开发效率,简化项目的开发过程。
AOP(面向切面编程) 和 DI(依赖注入)
AOP和DI
1、什么是依赖关系?
当 a 对象完成某些操作需要调用到b对象中的方法来实现时,说明a对象依赖于b对象,a和b就是依赖关系。
A B 两个类,B中的方法需要调用到A中的方法来完成业务,所以在创建B对象的时候,把A对象作为B构造器的参数。但是后期如果需要依赖到C对象、D对象等,又得进行修改。
能不能找一个第三方来把这个事情给做了,比如给第三方一个清单,清单中告诉第三方我需要用到B对象以及B需要依赖的对象,然后由这个第三方去负责创建和组装B对象,使用者需要使用B对象的时候,只需要向第三方发起一个查找,如果第三方那边有B对象,直接将其内部组装好的B对象返回就可以了,整个系统中所有需要用到的对象都可以列个清单,让第三方帮忙创造,用的时候只需要向第三方索取就可以了,当B中依赖的对象有新增或者删除的时候,只需要去调整一下清单就可以了,这个事情spring已经帮我们实现了。
spring容器
spring容器的概念,容器这个名字起的相当好,容器可以放很多东西,我们的程序启动的时候会创建spring容器,会给spring容器一个清单,清单中列出了需要创建的对象以及对象依赖关系,spring容器会创建和组装好清单中的对象,然后将这些对象存放在spring容器中,当程序中需要使用的时候,可以到容器中查找获取,然后直接使用。
IOC:控制反转
使用者之前使用B对象的时候都需要自己去创建和组装,而现在这些创建和组装都交给spring容器去给完成了,使用者只需要去spring容器中查找需要使用的对象就可以了;这个过程中B对象的创建和组装过程被反转了,之前是使用者自己主动去控制的,现在交给spring容器去创建和组装了,对象的构建过程被反转了,所以叫做控制反转;
IOC是面相对象编程中的一种设计原则,主要是为了降低系统代码的耦合度,让系统利于维护和扩展
问题来了,spring怎么知道我们创建爱的B对象需要依赖到哪些东西,我们怎么把B对象要依赖的东西传给spring容器让它知道呢。
这就涉及到了依赖注入
DI:依赖注入
依赖注入是spring容器中创建对象时给其设置依赖对象的方式,比如给spring一个清单,清单中列出了需要创建B对象以及其他的一些对象(可能包含了B类型中需要依赖对象),此时spring在创建B对象的时候,会看B对象需要依赖于哪些对象,然后去查找一下清单中有没有包含这些被依赖的对象,如果有就去将其创建好,然后将其传递给B对象;可能B需要依赖于很多对象,B创建之前完全不需要知道其他对象是否存在或者其他对象在哪里以及被他们是如何创建,而spring容器会将B依赖对象主动创建好并将其注入到B中去,比如spring容器创建B的时候,发现B需要依赖于A,那么spring容器在清单中找到A的定义并将其创建好之后,注入到B对象中。
我们常用的注入方式:
用 @Autowired 注解 给对象注入其依赖的对象
题外话:
构造器
构造器,又称为构造方法。
构造器用于构造该类的实例,也就是对象
格式如下:[修饰符] 类名 (形参列表){//n条语句}
构造器最大的用处就是在创建对象时执行初始化,当创建一个对象时,系统会为这个对象的实例进行默认的初始化。如果想改变这种默认的初始化,就可以通过自定义构造器来实现
构造方法是一种特殊的方法,与一般的方法区别:
1、构造方法的名字必须与定义他的类名完全相同,没有返回类型,甚至连void都没有
2、构造方法的调用是在创建一个对象时使用new操作的。构造方法的作用是初始化对象
3、不能被static、final、synchronized、abstract和native 这些非访问性质的修饰关键字修饰。
4、构造方法不能被子类继承
5、每个类可以有零个或多个构造方法
6、构造方法在创建对象时自动执行,一般不能显示直接调用
总结
IOC控制反转,是一种设计理念,将对象创建和组装的主动控制权利交给了spring容器去做,控制的动作被反转了,降低了系统的耦合度,利于系统维护和扩展,主要就是指需要使用的对象的组装控制权被反转了,之前是自己要做的,现在交给spring容器做了。
DI依赖注入,表示spring容器中创建对象时给其设置依赖对象的方式,通过某些注入方式可以让系统更灵活,比如自动注入等可以让系统变的很灵活
spring容器:主要负责容器中对象的创建、组装、对象查找、对象生命周期的管理等等操作。
***参照《程序员路人》公众号的文章进行记录 ***