说说你对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。
- bean的实例化
- 设置属性值
- 如果实现BeanNameAware接口,调用setBeanName()方法设置ID
- 调用BeanFactoryAware.setBeanFactory(setBeanFactory(BeanFactory):可以用这个方式来获取其它Bean,只需在Spring配置文件中配置一个普通的Bean就可以
- 如果Bean实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文
- 如果在spring配置中还配置了init-method属性,会自动调用该方法初始化。
- 如果关联BeanPostProcessor接口,调用postProcessAfterInitialization(Object obj, String s)方法,这时bean对象就可以被应用
- 如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor经常被用作是Bean内容的更改,并且由于这个是在Bean初始化结束时调用那个的方法,也可以被应用于内存或缓存技术
- 如果配置文件通过init-method属性指定了初始化方法,就调用该方法。
- 如果作用域是单例,就会放在容器缓存池中,由spring对该bean的生命周期进行管理,如果是多例,则会交给调用者管理该bean的生命周期
- 如果实现disposableBean接口,spring就会调用destory()方法销毁bean。如果配置了destroy-method指定了销毁方法,会自动调用该方法
Bean的装配
AOP
面向切面编程是一种编程思想,是对oop(面向对象编程)的一种补充。面向对象编程将程序抽象成各个层次的对象,而面向切面编程是将程序抽象成各个切面。
从该图可以很形象地看出,所谓切面,相当于应用对象间的横切点,我们可以将其单独抽象为单独的模块。
想象一下,开发中在多个模块间有某段重复的代码,一般做法是将这些抽象成一个方法,然后在需要的地方分别调用这个方法,这样当这段代码需要修改时,我们只需要改变这个方法就可以了。然而需求总是变化的,有一天,新增了一个需求,需要再多出做修改,我们需要再抽象出一个方法,然后再在需要的地方分别调用这个方法,又或者我们不需要这个方法了,我们还是得删除掉每一处调用该方法的地方。所有aop作用就是在不改变原有的逻辑的基础上,增加一些额外的功能 。Spring 中的 AOP 是通过动态代理实现的,动态代理就是,在程序运行期,创建目标对象的代理对象,并对目标对象中的方法进行功能性增强的一种技术。在生成代理对象的过程中,目标对象不变,代理对象中的方法是目标对象方法的增强方法。可以理解为运行期间,对象中方法的动态拦截,在拦截方法的前后执行功能操作。
这篇关于说说你对spring框架的理解?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-28一步到位:购买适合 SEO 的域名全攻略
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign学习入门:轻松掌握微服务通信
- 2024-12-27OpenFeign学习入门:轻松掌握微服务间的HTTP请求
- 2024-12-27JDK17新特性学习入门:简洁教程带你轻松上手
- 2024-12-27JMeter传递token学习入门教程
- 2024-12-27JMeter压测学习入门指南
- 2024-12-27JWT单点登录学习入门指南
- 2024-12-27JWT单点登录原理学习入门