Spring框架深度解析:核心概念与优势
83 浏览量
更新于2024-08-03
收藏 14KB MD 举报
**** "SpringFramework常见知识点包括框架的定义、优缺点、主要模块、设计模式、IOC容器配置、BeanFactory与ApplicationContext的区别、依赖注入、bean定义、作用域、扩展点、循环依赖处理、事务传播行为、AOP概念及实现、以及动态代理方式等。"
#### 什么是Spring Framework?
Spring Framework 是一个全面的Java应用程序开发框架,它通过控制反转(IOC)和面向切面编程(AOP)提供了一个轻量级、模块化的基础,有助于减少代码间的耦合,提高开发效率。
#### Spring的优缺点
**优点**
1. **解耦合**:Spring通过依赖注入(DI)帮助组件之间保持松散耦合。
2. **模块化**:Spring包含多个可选模块,如数据访问、Web、事务管理等,可以根据需求选择使用。
3. **AOP支持**:Spring的AOP机制允许开发者创建横切关注点,如日志、缓存等。
4. **测试友好**:Spring支持单元测试和集成测试,提供Mock对象和测试工具。
**缺点**
1. **学习曲线**:Spring有大量功能和组件,学习和理解可能需要时间。
2. **过度配置**:如果不小心,Spring配置可能会变得复杂且难以维护。
3. **性能影响**:Spring的动态代理和容器管理可能导致轻微的性能开销。
#### Spring 主要提供了哪些模块?
1. **Core Container**:包括Core和Bean模块,提供了IOC容器的基础。
2. **Data Access/Integration**:包括JDBC、ORM、OXM、JMS模块,用于数据库访问和集成。
3. **Web**:Web上下文模块,提供基于Servlet的web应用支持。
4. **AOP**:提供面向切面编程的实现。
5. **Instrumentation**:用于类加载器和应用服务器特定的工具。
6. **MVC**:Spring Web MVC框架,用于构建Web应用。
#### Spring主要使用了哪些设计模式?
Spring框架中使用了许多设计模式,如工厂模式(BeanFactory)、单例模式、装饰器模式、代理模式(JDK或CGLIB动态代理)、策略模式(用于不同事务管理策略)、观察者模式(事件驱动)等。
#### Spring IOC容器的配置方式有哪些?
Spring 容器的配置可以通过XML、注解和Java配置三种方式完成。
#### BeanFactory和ApplicationContext的区别是什么?
BeanFactory是Spring最基础的容器,负责bean的实例化、依赖注入。ApplicationContext则在BeanFactory之上,增加了更多的企业级服务,如国际化、消息源、应用事件发布等。
#### 什么是IOC容器和DI依赖注入?
IOC(Inversion of Control)即控制反转,是将对象的创建和管理权交给容器,DI(Dependency Injection)依赖注入是实现IOC的一种方式,通过容器来管理对象的依赖关系。
#### Spring依赖注入的方式有几种?
依赖注入可以通过构造函数、setter方法、属性注解以及接口回调等方式实现。
#### 一个bean的定义包含了什么?(BeanDefinition)
BeanDefinition 包含了bean的类名、初始化方法、属性值、作用域、依赖关系、懒加载标志、AOP代理配置等信息。
#### bean的作用域有哪些?
Spring中的bean可以有以下作用域:Singleton(单例)、Prototype(原型)、Request、Session、GlobalSession以及Application。
#### Spring 的扩展点主要有哪些?
Spring的扩展点包括AOP切入点定义、自定义初始化和销毁方法、Bean后处理器、Bean定义读者、事件监听器等。
#### Spring如何解决循环依赖?
Spring通过三级缓存和提前暴露(Eager Exposure)机制解决循环依赖问题,对于单例bean,可以在构造阶段和初始化阶段分别进行两次检查和解析。
#### 事务的传播行为是什么?有哪些?
事务的传播行为定义了在一个事务方法被调用时,如何管理和传播事务。常见的传播行为有PROPAGATION_REQUIRED(默认,新事务或加入当前事务)、PROPAGATION_REQUIRES_NEW(新事务,隔离当前事务)、PROPAGATION_SUPPORTS(如果存在则使用,否则无事务)、PROPAGATION_MANDATORY(必须存在事务,否则异常)、PROPAGATION_NOT_SUPPORTED(不支持事务,若存在则挂起)、PROPAGATION_NEVER(不允许事务,若存在则异常)和PROPAGATION_NESTED(嵌套事务,若存在则新建子事务)。
#### 什么是AOP?
AOP(Aspect Oriented Programming)是面向切面编程,允许程序员定义“切面”,这些切面可以封装跨多个类的方法调用的共同关注点,如日志、事务管理等。
#### AOP的组成元素和概念有哪些?
AOP的主要概念包括:切面(Aspect)、通知(Advice)、连接点(Join Point)、切入点(Pointcut)、引入(Introduction)、织入(Weaving)和目标对象(Target Object)。
#### AOP实现方式有哪些?
AOP的实现通常有两种方式:静态代理(编译时增强,如AspectJ)和动态代理(运行时增强,如Spring AOP,可使用JDK动态代理或CGLIB)。
#### AspectJ AOP和Spring AOP的区别?
AspectJ是一个全面的AOP框架,可以在编译时或运行时实现切面,支持更复杂的切入点表达式和类型匹配。Spring AOP则是Spring框架内置的AOP实现,主要基于代理模型,切入点表达式相对较简单,通常适用于仅在Spring应用中的AOP场景。
#### cglib动态代理和jdk动态代理的区别?
JDK动态代理基于接口实现,适用于目标类实现了接口的情况;CGLIB是字节码生成库,当目标类没有实现接口时,CGLIB会创建目标类的子类并进行代理,性能上通常优于JDK动态代理,但需要目标类可被继承。
2019-09-03 上传
2021-10-15 上传
2024-06-21 上传
2023-07-11 上传
2023-05-25 上传
2023-06-09 上传
2023-05-31 上传
2023-04-29 上传
2023-06-13 上传
2023-06-28 上传
榴莲酱csdn
- 粉丝: 532
- 资源: 352
最新资源
- disqus-python:适用于Python的Disqus API绑定
- 行业分类-设备装置-便于首饰B2C平台管理的物流管理系.zip
- IPS:在手机中使用传感器的室内定位系统
- jdk-16.0.1_osx-x64_bin.tar.gz
- 基于python使用Speech Denoising with Deep Feature Losses网络对中文音频去噪设计与实
- 漂亮小清新自行车展示官网企业模板5222.zip
- PHP实例开发源码-php 俏微博管理系统.zip
- Beginning VB 6 Databases 2003_hall1i1_withinbh2_vb6_VB_源码
- 北京林业大学操作系统课程设计多用户文件系统(包含cpp和实验报告书)
- other-hash-methods-code-along-online-web-sp-000
- SistemKeretaApi:TUBES PBO(铁路信息系统)的回购大师
- STM32F103C8T6和DS1302时钟
- oo-tic-tac-toe-q-000
- 微型轴承外表面缺陷自动检测线设计.zip机械设计毕业设计
- 某花园工程高层施工组织设计-土木工程建造设计.zip
- Tiltiland:Tiltiland-一个Android手机游戏,您必须通过倾斜手机来保持小岛上动物的平衡