Spring知识点

Spring框架是一个轻量级的IOC和AOP容器的框架,用于简化企业级应用开发。它由多个模块组成,包括核心类库、AOP服务、数据访问抽象、ORM支持、Web开发特性等。Spring通过IOC和DI实现程序解耦,支持事务处理和AOP编程,同时兼容多种框架集成。
摘要由CSDN通过智能技术生成
  1. Spring是什么?
    • Spring 是一个轻量级的IOC(Inversion of Control)和AOP(Aspect Oriented Programming)容器的框架。主要就是为了解决企业应用的开发,使开发者只需关注业务逻辑即可。
    • Spring配置方式:XML配置、注解配置和Java配置【https://blog.csdn.net/qq_21508727/article/details/80773252
    • Spring由以下模块组成:
      • Spring core:Spring的核心类库,提供IOC服务
      • Spring Context:提供框架式的Bean的访问方式
      • Spring AOP:提供AOP服务
      • Spring Dao:Data Access Object(数据访问对象) 提供对JDBC(Java DataBase Connectivity)的抽象
      • Spring ORM:Object Relational Mapping(对象关系映射) 对现有的绝大部分的ORM框架的支持
      • Spring Web:提供针对Web开发的继承特性,如:文件上传
      • Spring MVC:提供面向Web应用的Model-view-Controller的实现
  2. 为什么使用Spring?
    • Spring提供IOC服务,容器能够帮助管理依赖对象,从而不需要自己创建和管理对象,更轻松的实现了程序的解耦
    • Spring提供了对事务的支持,使事务操作更方便
    • Spring提供了AOP服务,使解决问题更加方便
    • Spring支持多种框架的集成,如:MyBatis、Hibernate等
  3. OOP与AOP的区别是什么?
    • OOP:Object Oriented Programming(面向对象编程),针对业务处理过程中的实体以及属性和方法进行抽象和封装,以获得清晰及高效的逻辑单元划分
    • AOP:Aspect Oriented Programming(面向切面编程),针对业务处理过程中的切面进行提取,提取的是处理过程中的某个步骤和阶段,以获得业务逻辑各部分的低耦合隔离的效果
  4. 讲讲对Spring的AOP理解?
    • Aspect Oriented Programming(面向切面编程),通过预编译和运行时的动态代理来完成程序中的功能。简单来说就是统一处理一个“切面”(类)的问题的编程思想,如:统一处理日志和异常
    • AOP中的概念定义:
      • JoinPoint(连接点):控制的每一个方法
      • PointCut(切入点):控制规则的定义
      • Advice(通知):
        • 前置通知(Before Advice 前置增强):在一个JoinPoint的之前执行的通知,即:在执行before()方法之前的通知
        • 后置通知(AfterReturnning Advice 后置增强):当一个JoinPoint的成功执行完之后执行的通知,即:在afterReturn()正常执行完之后的通知
        • 异常抛出通知(After Throwing Advice):当一个方法中抛出异常时执行的通知
        • 最终通知(After(finally) Advice):不管有没有正常执行完毕都执行的通知
        • 环绕通知(Around Advice):围绕一个JoinPoint的通知,由Before Advice和AfterReturn Advice组成的,Nanning和JBoss4只提供环绕通知
      • Aspect(切面):由PointCut和Adivce组成,两者决定了切面的定义,通过@Aspect注解实现
      • Target(目标对象):程序运行期生成目标对象的代理对象
      • Weave(织入):程序运行期生成目标对象的代理对象的过程
      • Introduction(引入):程序运行期为类动态的添加方法或属性的过程
  5. 讲讲对Spring的IOC的理解?
    • Inversion of Control(控制反转),简单来说,我们就是把new操作交给Spring IOC的容器,通过Java的反射机制,在程序运行时根据配置文件动态的创建和管理对象,以及调用对象的方法
    • DI(Dependency Injection)依赖注入,和控制反转是同一概念而不同的描述,在程序运行时通过IOC容器动态注入对象需要的外部资源
    • IOC的注入方式:构造器注入、setter注入、注解注入
  6. Spring的Bean的生命周期?
    • 在使用未被初始化的Bean时,Bean的生命周期:【https://blog.csdn.net/Longmanfei/article/details/83906723
      • BeanFactory容器寻找Bean配置文件并实例化Bean
      • 依赖注入,Spring根据Bean的配置文件来完成Bean的所有依赖的注入
      • 如果Bean实现了BeanNameAware接口,就会执行setBeanName()传递Bean的ID
      • 如果Bean实现了BeanFactoryAware接口,就会执行setBeanFactory()传入工厂本身
      • 如果Bean实现了BeanPostProcessor接口,就会在初始化之前执行postProcessorBeforeInitialization()
      • 如果配置文件中配置了init-method,执行配置中的初始化方法
      • 最后,如果Bean实现了BeanPostProcessor接口,就会执行PostProcessorAfterInitialization(),执行完代表Bean创建完成。
      • Bean的销毁:
        • 如果Bean实现了DisposableBean接口,那么我们可以调用destory()进行销毁Bean
        • 如果Bean的配置文件中配置了destory-method,则会自动调用配置文件中的销毁方法
  7. Spring的Bean的作用域有哪几种?Spring的Bean是线程安全的吗?
    • 5种作用域:
      • singleton:默认作用域,SpringIOC只提供一个Bean的实例,即每次返回的都是同一个Bean实例
      • prototype:SpringIOC为每一个Bean创建一个新实例,即每次返回的都是一个新的实例
      • Web环境下的作用域:
        • request:每一次http请求都会创建一个新的实例
        • session:在一个http session会话中共享一个实例
        • global-session:用于portlet容器中,每一个portlet容器都拥有独自的session,global-session提供了全局性的http session
    • Spring的Bean作用域默认模式是“singleton”,而Spring并没有对Bean的单例模式下进行多线程的封装。绝大部分情况Spring Bean是无状态【指的是不会存储数据】的(如:DAO类),那么在某种程度上来说是线程安全的,但如果Spring Bean是有状态【指的是会存储数据】的(如:view、model对象),线程安全就需要开发者维护,最简单的方式就是修改作用域,将“singleton”改为“prototype”
  8. Spring基于XML注入Bean的方式有几种?
    • set方法的注入
    • 构造器的注入
    • 静态工厂的注入
    • 实例工厂的注入
  9. Spring自动装配Bean有哪些方式?
    • 基于XML:
      • no:默认装配方式,设置ref属性来进行装配Bean
      • byName:通过设置name属性进行装配,如果一个Bean中的property的值与另一个Bean中的name值相同,那么就会自动装配
      • byTpye:通过参数的数据类型进行装配
      • constructor:通过构造器进行装配,并且构造器参数是使用byType进行装配
      • autodetect:容器首先通过构造器使用autowire进行装配,如果不能,则使用byType自动装配
    • 使用注解:
      • @Autowired:通过byType(符合Spring规范)进行装配的,要求依赖的对象必须存在,如果要允许为null,那么可以将require属性设置为false(@Autowired(require=false)),如果先要通过name进行装配可以配合@Qualifier注解进行使用
      • @Resource:通过byName(符合J2EE规范)进行装配的,如果name属性没有指定,当注解放在字段上,默认用字段名进行名称查找,当放在setter方法上默认使用属性名进行装配。如果没有查询到则使用byType进行装配。需要我们注意的是如果name属性被指定了,那么只能使用byName进行装配
  10. Spring框架中使用到的设计模式有哪些?
    • 工厂模式:BeanFactory就是工厂模式的体现,用来创建实例Bean对象
    • 模板模式:用来解决代码重复的问题
    • 代理模式:Spring AOP就使用了JDK动态代理和CGLIB动态代理
    • 单例模式:Spring Bean默认是单例模式
    • 观察者模式:是对象键的一种一对多的依赖关系,当一个对象状态被修改时,依赖的其他对象就会得到通知被制动更新
  11. Spring事务实现方式有哪些?
    • 编程式事务管理:
      • 通过提供编码的形式进行管理和维护事务
        • 优点:最细粒度能够作用到代码块
        • 缺点:对代码的侵入
    • 声明式事务管理:
      • 基于AOP功能完成,对方法前后进行拦截,将事务处理的操作编写到拦截方法中,当目标方法执行完根据执行情况进行提交或回滚事务
        • 优点:对代码无侵入性,可以使用@Transaction注解完成对事务的控制
        • 缺点:最细粒度只能够作用到方法
  12. 说一下Spring的事务隔离?
    • Spring的事务隔离的本质就是数据库对事务的支持,如果数据库没有对事务的支持,Spring的也就无法提供事务的功能
    • 事务的四种特性:
      • 原子性:保证事务不可分割
      • 一致性:事务执行之后的数据完整性必须一致
      • 隔离性:事务执行过程中不能够被其他事务所干预
      • 持久性:事务执行结束后会持久化到数据库中
    • 事务的五种隔离级别:
      • ISOLATION_DEFAULT:Spring使用底层数据的事务隔离级别
      • ISOLATION_READ_UNCOMMITTED:读未提交,最低的隔离级别,事务未提交数据就能被其他事务读取,会出现脏读、幻读和不可重复读的问题
      • ISOLATION_READ_COMMITTED:读已提交,事务已提交数据其他事务才能进行读取,会出现幻读和不可重复读的问题,SQLServer的默认级别
      • ISOLATION_REPEATABLE_READ:可重复读,保证事务多次读取同一数据时,其值必须和事务开始时的内容相同,会出现幻读的问题,MySQL的默认级别
      • ISOLATION_SERIALIZABLE:序列化,最高的隔离级别,能够防止脏读、幻读和不可重复读的问题
    • 三种在事务中常见的安全问题:
      • 脏读:当一个事务还未提交数据就被其他事务读取
      • 幻读:同一个事务多次查询到的结果集都不相同。幻读产生的原因是因为其他事务修改了(Insert和delete操作)此事务中数据所导致查询出的结果多了或少了数据
      • 不可重复读:在一个事务内,多次访问一个数据,得到的数据不相同(update操作)

转载于:https://www.cnblogs.com/Fmir/p/11481125.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值