说说你对spring框架的理解?

2021/6/30 23:20:54

本文主要是介绍说说你对spring框架的理解?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

说说你对spring框架的理解

  • IOC
    • Bean的作用域
    • Bean的生命周期
    • Bean的装配
  • AOP

首先spring是一个开源的轻量级的框架,说到spring就不得不提两个概念,IOC(控制反转)和AOP(面向切面编程)

IOC

一般情况下,我们创建对象都是通过new关键字来创建,这样会导致程序的耦合性增加,现在我们通过spring容器来帮我们创建对象,这样创建对象的控制权就发生了反转,这就叫控制反转。spring容器创建好对象后,我要使用这个对象啊,spring就要将对象赋值,为调用者注入依赖的实例对象,这就是依赖注入(注入方式有两种,1.通过setter方法,2.通过构造方法)。

Bean的作用域

1.单例(singleton)
单例顾名思义,该Bean对象在容器中只会被创建一个,无论多少 Bean对象引用它,都是指向这一个实例(也是spring默认的作用域),所以当容器创建时这个对象也就创建了(多个线程同时存取共享资源时有可能引发的数据不同步问题)

2.多例(也叫原型,prototype)
这个意思就是,每次找spring对象获取这个Bean对象时,容器就会创建一个新的对象,所以容器创建时该对象是不存在的,只有我们获取的时候,才会被创建,而且还是不是同一个对象

(spring常用的就是这个两个,还有其他的作用域,这里不展开说明)

Bean的生命周期

在spring中,一旦把一个bean纳入到Spring IoC容器之中,这个bean的生命周期就会交由容器进行管理,一般担当管理者角色的是BeanFactory或ApplicationContext。
在这里插入图片描述

  1. bean的实例化
  2. 设置属性值
  3. 如果实现BeanNameAware接口,调用setBeanName()方法设置ID
  4. 调用BeanFactoryAware.setBeanFactory(setBeanFactory(BeanFactory):可以用这个方式来获取其它Bean,只需在Spring配置文件中配置一个普通的Bean就可以
  5. 如果Bean实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文
  6. 如果在spring配置中还配置了init-method属性,会自动调用该方法初始化。
  7. 如果关联BeanPostProcessor接口,调用postProcessAfterInitialization(Object obj, String s)方法,这时bean对象就可以被应用
  8. 如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor经常被用作是Bean内容的更改,并且由于这个是在Bean初始化结束时调用那个的方法,也可以被应用于内存或缓存技术
  9. 如果配置文件通过init-method属性指定了初始化方法,就调用该方法。
  10. 如果作用域是单例,就会放在容器缓存池中,由spring对该bean的生命周期进行管理,如果是多例,则会交给调用者管理该bean的生命周期
  11. 如果实现disposableBean接口,spring就会调用destory()方法销毁bean。如果配置了destroy-method指定了销毁方法,会自动调用该方法

Bean的装配

AOP

面向切面编程是一种编程思想,是对oop(面向对象编程)的一种补充。面向对象编程将程序抽象成各个层次的对象,而面向切面编程是将程序抽象成各个切面。
在这里插入图片描述
从该图可以很形象地看出,所谓切面,相当于应用对象间的横切点,我们可以将其单独抽象为单独的模块。

想象一下,开发中在多个模块间有某段重复的代码,一般做法是将这些抽象成一个方法,然后在需要的地方分别调用这个方法,这样当这段代码需要修改时,我们只需要改变这个方法就可以了。然而需求总是变化的,有一天,新增了一个需求,需要再多出做修改,我们需要再抽象出一个方法,然后再在需要的地方分别调用这个方法,又或者我们不需要这个方法了,我们还是得删除掉每一处调用该方法的地方。所有aop作用就是在不改变原有的逻辑的基础上,增加一些额外的功能 。Spring 中的 AOP 是通过动态代理实现的,动态代理就是,在程序运行期,创建目标对象的代理对象,并对目标对象中的方法进行功能性增强的一种技术。在生成代理对象的过程中,目标对象不变,代理对象中的方法是目标对象方法的增强方法。可以理解为运行期间,对象中方法的动态拦截,在拦截方法的前后执行功能操作。



这篇关于说说你对spring框架的理解?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程