框架:
所谓的框架,就是别人写好的代码,我们直接拿过来用就行,但是框架都是一些半成品,需要我们去配置之后才能实现一些具体功能
Spring:是个世界级流行框架,单词直译是春天的意思,比喻为程序员的春天
为什么需要使用Spring (好处):
1,Spring可以帮我们降低耦合度
2.可以帮我们控制事务
3.非侵入式设计轻量级框架
4.可以与大多数框架集成
5.Spring提供JavaEE一站式服务(一条龙: dao,service,servlet…)
6.支持AOP
7.方便程序的测试
Spring中的常见术语(黑话):
1.应用程序 就是我们写的项目
2.框架 能完成一定功能的半成品
3.非侵入时设计 无需继承框架内的类,就能实现功能,后期很方便修改为其他框架
4.轻量级与重量级 轻量级与重量级都是相对应的,并没有非常固定的标准,但是一般非侵入式框架都是轻量级的,反之则是重量级
5.bean(pojo,model)有的Java对象都可以称呼为JavaBean
6.容器 用来装Java的东西
Spring的常用组件:
SpringContext 上下文支持
SpringAop
SpringBeans
SpringTest
SpringData
SpringJDBC
SpringCore
Spring的常见版本:
2.5 支持jdk1.4
3.x 不支持jdk1.4
4.x 开始支持jdk1.8
5.x
IOC的概念:
控制反转(Inversion of Control)简称为IOC,是面向对象编程的一种设计原则,可以用来降低代码之间的耦合度,其中最常见的实现方式是DI(依赖注入).
控制反转:
之前的所有对象都是由我们在程序之中手动new出来的,而使用Spring之后我们所有的对象都由Spring容器去创建,我们需要的时候只需要在容器中获取即可(反转创建对象的权利).
依赖注入:
Spring在创建对象的过程中,将对象中所依赖的属性注入到对象之内(给创建对象赋值)
使用Spring之后,我们不需要在代码中去维护对象的依赖关系,所有关系都在配置文件或注解中完成,Spring会在创建对象的过程中根据我们的配置去设置对象的依赖关系
JUnit:单元测试,可以让我们的普通方法跟main方法一样可以运行
JUnit的方法要求:
1.必须无参
2.必须public修饰
3.必须没返回值
Spring实例化对象的4中方法:
一.构造器实例化(最常使用).
(1).默认调用无参构造器(与访问修饰符无关)
(2).如果类中没有无参构造,则可以在bean标签中使用 constructor-arg调用有参构造方法.
二.静态工厂实例化(了解即可)
三.实例工厂实例化(了解即可)
四.实现FactoryBean接口实例化(了解即可)
(1).由其他框架使用,哪个框架的对象想交给Spring管理,那就实现Spring的这个接口就好
Spring在Bean中的作用域:(主要控制对象是否单例)
在Spring中默认创建的bean都是单例的,如果想改变的话可以在标签中使用scope属性来改变
singleton(单例):所有创建出来的对象都是单例的
prototype(多例):每一次取出的对象都是全新的
request(请求):用于web开发,每一次请求都会创建一个全新的对象(一次请求获取N次都是同一个对象)
session(会话):用于web开发,每一次会话都会创建一个全新的对象
globalSession:用于分布式
SpringBean的生命周期(对象的创建与销毁):
Spring再创建|销毁对象的时候我们可以在xml中指定其在创建|销毁对象时调用了哪些初始化方法,以及销毁方法init-method=“init” destory-model=“close”
在创建对象的时候会执行init-method中的方法,容器关闭时销毁对象的时候会执行destroy-method的方法,多例的对象Spring容器不负责销毁.
ApplicationContext 与 BeanFactory的关系:
BeanFactory:ioc容器的最底层根接口,负责了对象的管理,创建,销毁等功能
ApplicationContext:继承了BeanFactory接口,除了可以管理对象以外,还支持国际化,消息机制,AOP,资源加载等很多其他的功能
Spring创建对象的时机:
ApplicationContext:默认在加载xml文件的时候就创建了所有的对象(不包括实现FactoryBean接口),可以在bean标签中使用lazy-init=“true”,来让对象延迟加载,(什么时候get这个对象,什么时候创建)
BeanFactory: 默认什么时候getBean 什么时候加载对象。