Loading

拉勾笔记02(1)Spring IOC和AOP应用篇

拉勾笔记02(1)Spring IOC和AOP应用篇

1、应用

1.1、什么是IOC和DI

1.1.1、IOC

inversion of control(控制反转),控制反转是一个技术思想,而不是技术实现。

无需自己去new对象,而是由IOC容器去帮助我们实例化并管理,当需要对象的时候,直接去问IOC要即可。

img点击并拖拽以移动

1.1.2、AOP

AOP(Aspect Oriented Programming)面向切面编程,其实是OOP的延续。AOP的出现主要是解决在不改变原有业务逻辑情况下,增强横切逻辑代码。

切:指的是横切逻辑,原有业务逻辑代码不动,只操作横切代码逻辑。

面:横切逻辑往往要影响的是很多方法,每个方法如同一个点,多个点构成一个面。

1.2、BeanFactory与ApplicationContext区别

img点击并拖拽以移动

如上图的继承图可知,BeanFactory是Spring框架中IOC容器的顶层接口,用来定义一些基础和规范。而ApplicationContext是它的一个子接口,所以ApplicationContext是具备BeanFactory提供的全部功能。

1.3、Bean详解

1.3.1、xml方式

作用范围

如果使用xml方式创建bean,bean标签中会有scope属性用来声明作用范围

<!--配置service对象-->
<bean id="transferService"
class="com.lagou.service.impl.TransferServiceImpl" scope="singleton">
</bean>

点击并拖拽以移动

img点击并拖拽以移动

scope中可选的属性值有如上几种

  1. 单例模式:singleton(ioc容器中仅有单例bean存在)
  2. 多例模式:prototype(每次从ioc容器中获取bean的时候,都会返回一个新实例)
  3. 多例模式:request(每次Http请求会创建一个新的实例)
  4. 多例模式:session(同一Http Session共享一个bean)
Bean标签属性

在基于xml的IoC配置中,bean标签是最基础的标签。它表示了IoC容器中的⼀个对象。换句话
说,如果⼀个对象想让spring管理,在XML的配置中都需要使⽤此标签配置,Bean标签的属性如
下:

  • id属性: ⽤于给bean提供⼀个唯⼀标识。在⼀个标签内部,标识必须唯⼀。
  • class属性:⽤于指定创建Bean对象的全限定类名。
  • name属性:⽤于给bean提供⼀个或多个名称。多个名称⽤空格分隔。
  • factory-bean属性:⽤于指定创建当前bean对象的⼯⼚bean的唯⼀标识。当指定了此属性之后,class属性失效。
  • factory-method属性:⽤于指定创建当前bean对象的⼯⼚⽅法,如配合factory-bean属性使⽤,则class属性失效。如配合class属性使⽤,则⽅法必须是static的。
  • scope属性:⽤于指定bean对象的作⽤范围。通常情况下就是singleton。当要⽤到多例模式时,可以配置为prototype。
  • init-method属性:⽤于指定bean对象的初始化⽅法,此⽅法会在bean对象装配后调⽤。必须是⼀个⽆参⽅法。
  • destory-method属性:⽤于指定bean对象的销毁⽅法,此⽅法会在bean对象销毁前执⾏。它只能为scope是singleton时起作⽤。
DI依赖注入
  • 构造器注入:⽤带参构造函数实现对类成员的数据赋值
  • set方法注入:它是通过类成员的set⽅法实现数据的注⼊

1.4、高级特性

1.4.1、延迟加载

ApplicationContext容器的默认行为是启动服务时将所有singleton bean提前进行实例化。提前实例化意味着作为初始化的一部分,ApplicationContext实例会创建并配置所有的singleton bean。

<bean id="testBean" class="cn.lagou.LazyBean" />
该bean默认的设置为:
<bean id="testBean" calss="cn.lagou.LazyBean" lazy-init="false" />

如果不想让singleton bean在ApplicationContext初始化时候提前实例化,那么可将bean设置为延迟实例化

<bean id="testBean" calss="cn.lagou.LazyBean" lazy-init="true" />

1.4.2、 FactoryBean和BeanFactory

BeanFactory是容器的顶级接口,定义容器的一些的基础行为,是负责生产和管理Bean的一个工厂

Spring中Bean有两种,一种是普通bean,一种是工厂Bean(FactoryBean),FactoryBean可以生成某一个类型的Bean实例,这里也就是说它的作用主要是自定义Bean的创建过程

1.4.3、SpringBean的生命周期

image-20200829191155984

Spring容器启动的过程中,会将Bean解析为Spring内部的BeanDefinition结构

image-20200829222844943

由上图BeanDefinition所有方法结构可知,BeanDefinition作用是将Bean的定义信息存储在BeanDefinition相应的属性中,例如类名、属性、构造函数参数列表等等,后续对Bean的操作就直接对BeanDefinition进行即可。

2、源码

因源码篇幅较长,单独开一篇

posted @ 2020-08-29 22:49  xpang0  阅读(529)  评论(0编辑  收藏  举报