咸鱼的Spring学习之路
IOC容器
面向接口编程
由接口提供抽象方法,让实现类去实现这个接口的抽象方法并实现它,这样做的好处就是,如果有多个实现类共同实现这个接口的抽象方法的时候,如果其中某一个实现类需要修改实现方法的时候的,不会影响其他实现类。
- 面向接口编程的思路 ,接口 impl = NEW 实现类,然后再由impl去调用实现类里面的实现方法;
- 如:接口A a = NEW 实现类Aimpl;
a.实现方法(); - 由接口来进行声明,将接口的实现类来赋值给声明变量;
IOC(控制反转)
1.应用程序不负责依赖对象的创建和维护,而是由外部去创建和维护;
XML配置bean的时候,get它的bean的时候,去get配置的id就可以获取对应的对象里面的方法及属性;
Bean容器的初始化
Bean容器的初始化依赖两个基础的包
一个是org.springframework.bean,在Bean包里面主要是BeanFactory和其他子类提供了配置结构和其他功能,加载和初始化Bean;
一个是org.springframework.context,在context包里面主要提供了ApplicationContext和其他实现类,保存了Bean对象,并在Spring中被广泛应用;
Spring的注入
Spring注入是指在启动Spring容器加载bean配置的时候,完成对变量的赋值行为。
常用的注入方式有两种:
1、设值注入。
通过set方式去注入,设置set的类里面必须要有被设值的类成员变量的set方法;
2、构造注入。
通过构造器注入,创建构造方法,传入被注入的类,再在构造方法里面对被注入的类进行赋值注入;
Spring的Bean装配
bean的配置和作用域
常用的bean的配置项
id:bean的唯一标示,Class:要实例化的类,Scope:作用域,Constructor arguments:构造器的参数,Properties:属性
bean的作用域
singleton:单例模式(默认),在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例
prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例
request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效
session:对于每次HTTP Session,使用session定义的Bean豆浆产生一个新实例。同样只有在Web应用中使用Spring时,该作用域才有效
globalsession:每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才有效
bean的声明周期
bean的初始化和销毁
当一个方法同时定义了全局的初始化和销毁方法、配置bean的时候定义了bean的初始化和销毁方法以及在bean类中实现类bean的初始化接口和销毁接口的时候,优先执行的是接口里面的方法,再执行bean配置的初始化和销毁方法。全局初始化和销毁方法不会被执行。
当配置了全局初始化和销毁的时候,bean类里面可以没有对应的初始化和销毁方法。
使用ApplicationContext进行装载bean时,是提前实例化好了再去获取Bean,但是BeanFactory是获取了对象之后再进行实例化。
如果没有初始化applicationContext,则不会有bean,所以在初始化bean前面,要先初始化applicationContext
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
如何插入代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
var foo = 'bar';
- 计划任务
- 完成任务
创建表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
创建一个注脚
一个具有注脚的文本。1
注释
Markdown将文本转换为 HTML。
ioc容器总结:
在加载spring的时候,会将所有bean对应的属性统一交给容器去管理.这样我们在用的时候就不用想以前这代码一样去new它. 以前要用到对应的bean的时候,要去根据他的id去过去对应的bean,交给spring容器之后,我们要用到这个bean的时候,容器会自动去帮我们匹配对应的bean,这样我们就可以用到他对应的bean里面的方法. 减少了内存的使用,也减少了我们的代码量
aop总结:
以前我们自己运行方法的时候,如果中途想运行其他方法,要等他的方法走完才能运行我们想在中间插入的方法,而使用aop切面编程的时候,则可以同时运行插入的方法而不影响原来方法的运行. 比如有一个长条形的方法在运行,突然运行到中间的时候,我想插入另一个方法,按照编程思路来说,我们会认为要等中间插入的方法执行完才会执行长条形方法的下半部,而aop则不用,他类似给我们起了另一个线程,让我们同时运行中间插入的方法而不影响长条形下半部的方法,也就是可以同时运行多个方法.
注脚的解释 ↩︎