Spring框架

2020-10-30  本文已影响0人  久伴_不离

Spring框架

Spring框架的七大模块

Spring Core:框架的最基础部分,提供 IoC 容器,对 bean 进行管理。

Spring Context:继承BeanFactory,提供上下文信息,扩展出JNDI、EJB、电子邮件、国际化等功能。

Spring DAO:提供了JDBC的抽象层,还提供了声明性事务管理方法。

Spring ORM:提供了JPA、JDO、Hibernate、MyBatis 等ORM映射层.

Spring AOP:集成了所有AOP功能

Spring Web:提供了基础的 Web 开发的上下文信息,现有的Web框架,如JSF、Tapestry、Structs等,提供了集成

Spring Web MVC:提供了 Web 应用的 Model-View-Controller 全功能实现。

Bean定义5种作用域

singleton(单例) prototype(原型) request session global session

spring ioc初始化流程?

resource定位 即寻找用户定义的bean资源,由 ResourceLoader通过统一的接口Resource接口来完成 beanDefinition载入 BeanDefinitionReader读取、解析Resource定位的资源 成BeanDefinition 载入到ioc中(通过HashMap进行维护BD) BeanDefinition注册 即向IOC容器注册这些BeanDefinition, 通过BeanDefinitionRegistery实现

BeanDefinition加载流程?

定义BeanDefinitionReader解析xml的document BeanDefinitionDocumentReader解析document成beanDefinition

DI依赖注入流程? (实例化,处理Bean之间的依赖关系)

过程在Ioc初始化后,依赖注入的过程是用户第一次向IoC容器索要Bean时触发

如果设置lazy-init=true,会在第一次getBean的时候才初始化bean, lazy-init=false,会容器启动的时候直接初始化(singleton bean);

调用BeanFactory.getBean()生成bean的;

生成bean过程运用装饰器模式产生的bean都是beanWrapper(bean的增强);

依赖注入怎么处理bean之间的依赖关系?

其实就是通过在beanDefinition载入时,如果bean有依赖关系,通过占位符来代替,在调用getbean时候,如果遇到占位符,从ioc里获取bean注入到本实例来

Bean的生命周期?

Spring的IOC注入方式有哪几种

构造器注入 setter方法注入 注解注入 接口注入

怎么检测是否存在循环依赖?

Bean在创建的时候可以给该Bean打标,如果递归调用回来发现正在创建中的话,即说明了循环依赖了。

Spring如解决Bean循环依赖问题?

Spring中循环依赖场景有:

Spring 中使用了哪些设计模式?

AOP 核心概念

1.切面(aspect):类是对物体特征的抽象,切面就是对横切关注点的抽象
2.横切关注点:对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点。
3.连接点(joinpoint):被拦截到的点,因为 Spring 只支持方法类型的连接点,所以在Spring 中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器。
4.切入点(pointcut):对连接点进行拦截的定义
5.通知(advice):所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类。
6.目标对象:代理的目标对象
7.织入(weave):将切面应用到目标对象并导致代理对象创建的过程
8.引入(introduction):在不修改代码的前提下,引入可以在运行期为类动态地添加方法或字段。

解释一下AOP

传统oop开发代码逻辑自上而下的,这个过程中会产生一些横切性问题,这些问题与我们主业务逻辑关系不大,会散落在代码的各个地方,造成难以维护,aop思想就是把业务逻辑与横切的问题进行分离,达到解耦的目的,提高代码重用性和开发效率;

AOP 主要应用场景有:

AOP源码分析

AOP使用哪种动态代理?

什么是jdk动态代理

动态代理与静态代理区别

CGLIB与JDK动态代理区别

上一篇下一篇

猜你喜欢

热点阅读