Spring框架深度解析:核心概念与优势

0 下载量 155 浏览量 更新于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动态代理,但需要目标类可被继承。