Spring知识点
第一章:基础概念
1,什么是spring
- spring是一个简化java企业级开发的一个框架,内部包含了很多技术,比如:控制反转&依赖注入、面向切面编程、spring事务管理、通过spring集成其他框架、springmvc、springboot、springcloud等等
2,spring容器
- spring容器的概念,容器这个名字起的相当好,容器可以放很多东西,我们的程序启动的时候会创建spring容器,会给spring容器一个清单,清单中列出了需要创建的对象以及对象依赖关系,spring容器会创建和组装好清单中的对象,然后将这些对象存放在spring容器中,当程序中需要使用的时候,可以到容器中查找获取,然后直接使用。
- spring容器:主要负责容器中对象的创建、组装、对象查找、对象生命周期的管理等等操作。
3,控制反转(Ioc)
-
IOC之前的对象管理和创建,demo,分别创建类A和B,B中的m1方法需要调用A中的m1方法
demo1:方式1
public class B { private A a; public B() { this.a = new A(); } public void m1() { this.a.m1(); } } /* 类B中的m1方法调用的时候需要调用类A中的m1方法,也就是说B依赖A,在使用B的时候需要调用者先创建好类A */
demo2:方式2
public class B { private A a; public B(A a) { this.a = a; } public void m1() { this.a.m1(); } } /* 上述代码在在创建对象B的时候需要将事先创建好的对象A传入,调用如下: */ A a = new A(); B b = new B(a); b.m1(); /* 上述代码进行扩展,如果B比如需要依赖于C、D、E、F或者更多对象,则调用如下: */ A a = new A(); C c = new C(); D d = new D(); E e = new E(); F f = new F(); ... B b = new B(a,c,d,e,f,...); b.m1(); /* 使用者创建B对象之前,需要先将B依赖的对象都给创建好,然后B依赖的这些对象传递给B对象,如果有很多地方都需要用到B类型的对象,都采用这种new的写法,代码量比较大,也不方便维护,如果B中新增了依赖,又需采用new的方式先创建好被依赖的对象,然后将被依赖的对象填充给B对象。 */
-
使用者之前使用B对象的时候都需要自己去创建和组装,而现在这些创建和组装都交给spring容器去给完成了,使用者只需要去spring容器中查找需要使用的对象就可以了;这个过程中B对象的创建和组装过程被反转了,之前是使用者自己主动去控制的,现在交给spring容器去创建和组装了,对象的构建过程被反转了,所以叫做控制反转;IOC是是面相对象编程中的一种设计原则,主要是为了降低系统代码的耦合度,让系统利于维护和扩展。
-
IOC控制反转,是一种设计理念,将对象创建和组装的主动控制权利交给了spring容器去做,控制的动作被反转了,降低了系统的耦合度,利于系统维护和扩展,主要就是指需要使用的对象的组装控制权被反转了,之前是自己要做的,现在交给spring容器做了。
4, 依赖注入(DI)
- 依赖注入是spring容器中创建对象时给其设置依赖对象的方式,比如给spring一个清单,清单中列出了需要创建B对象以及其他的一些对象(可能包含了B类型中需要依赖对象),此时spring在创建B对象的时候,会看B对象需要依赖于哪些对象,然后去查找一下清单中有没有包含这些被依赖的对象,如果有就去将其创建好,然后将其传递给B对象;可能B需要依赖于很多对象,B创建之前完全不需要知道其他对象是否存在或者其他对象在哪里以及被他们是如何创建,而spring容器会将B依赖对象主动创建好并将其注入到B中去,比如spring容器创建B的时候,发现B需要依赖于A,那么spring容器在清单中找到A的定义并将其创建好之后,注入到B对象中。
- DI依赖注入,表示spring容器中创建对象时给其设置依赖对象的方式,通过某些注入方式可以让系统更灵活。
5,面向切面编程(AOP)
第二章:Spring容器基本使用及原理
1,IOC容器(spring容器)
IOC容器是具有依赖注入功能的容器,负责对象的实例化、对象的初始化,对象和对象之间依赖关系配置、对象的销毁、对外提供对象的查找等操作,对象的整个生命周期都是由容器来控制。我们需要使用的对象都由ioc容器进行管理,不需要我们再去手动通过new的方式去创建对象,由ioc容器直接帮我们组装好,当我们需要使用的时候直接从ioc容器中直接获取就可以了。
2,那么spring ioc容器是如何知道需要管理哪些对象呢
需要我们给ioc容器提供一个配置清单,这个配置支持xml格式和java注解的方式,在配置文件中列出需要让ioc容器管理的对象,以及可以指定让ioc容器如何构建这些对象,当spring容器启动的时候,就会去加载这个配置文件,然后将这些对象给组装好以供外部访问者使用。
3,Bean概念
由spring容器管理的对象统称为Bean对象。Bean就是普通的java对象,和我们自己new的对象其实是一样的,只是这些对象是由spring去创建和管理的,我们需要在配置文件中告诉spring容器需要创建哪些bean对象,所以需要先在配置文件中定义好需要创建的bean对象,这些配置统称为bean定义配置元数据信息,spring容器通过读取这些bean配置元数据信息来构建和组装我们需要的对象。
4,Spring容器对象
1,BeanFactory接口
-
spring容器中具有代表性的容器就是BeanFactory接口,这个是spring容器的顶层接口,提供了容器最基本的功能。
-
常用的几个方法
//按bean的id或者别名查找容器中的bean Object getBean(String name) throws BeansException //这个是一个泛型方法,按照bean的id或者别名查找指定类型的bean,返回指定类型的bean对象 <T> T getBean(String name, Class<T> requiredType) throws BeansException; //返回容器中指定类型的bean对象 <T> T getBean(Class<T> requiredType) throws BeansException; //获取指定类型bean对象的获取器,这个方法比较特别,以后会专门来讲 <T> ObjectProvider<T> getBeanProvider(Class<T> requiredType);
2,ApplicationContext接口
- 这个接口继承了BeanFactory接口,所以内部包含了BeanFactory所有的功能,并且在其上进行了扩展,增加了很多企业级功能,比如AOP、国际化、事件支持等等。
- 后续
3,ClassPathXmlApplicationContext类
- 这个类实现了ApplicationContext接口,注意一下这个类名称包含了ClassPath Xml,说明这个容器类可以从classpath中加载bean xml配置文件,然后创建xml中配置的bean对象
- 后续
4,AnnotationConfigApplicationContext类
- 这个类也实现了ApplicationContext接口,注意其类名包含了Annotation和config两个单词,bean的定义支持xml的方式和注解的方式,当我们使用注解的方式定义bean的时候,就需要用到这个容器来装载了,这个容器内部会解析注解来构建构建和管理需要的bean。
- 后续