码迷,mamicode.com
首页 > 编程语言 > 详细

Spring

时间:2019-06-27 19:29:00      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:com   lookup   bin   npos   部分   功能   声明式   redo   服务   

1.Spring是什么?
    Spring是一个轻量级的IOC和AOP框架,目的是用于简化应用程序开发。
    IOC:控制反转(Inversion of  Control,缩写Ioc),是面向对象编程的一种设计原则,可以用来降低代码之间的耦合度。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。
        依赖注入:组建提供普通的Java方法让容器区决定依赖关系,会把符合依赖关系的对象通过JavaBean属性或者构造函数传递给需要的对象。
        依赖查找:容器通过回调接口和上下文条件给组件,组件必须使用容器提供的API来查找资源和协作对象。

    AOP:面向切面编程,将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽象并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性,可用于权限认证、日志、事务处理。
    OOP:面向对象编程,针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。缺点:不适于定义横向的关系,导致了大量代码的重复,而不利于各个模块的重用。
2.Spring主要由一下模块组成:
    Spring  Core:核心类库
    Spring  Context:提供框架式的Bean访问模式
    Spring  AOP:AOP服务。
    Spring  DAO:对JDBC的抽象,简化了数据访问异常的处理
    Spring  ORM:对现有的ORM框架的支持
    Spring  Web:提供了基本的面向Web的综合特性,例如多方文件上传
    Spring  MVC:提供面向Web应用的Model-View-Controller实现
3.Spring的优点:
    1.Spring属于低侵入式设计,代码的污染极低。
    2.Spring的DI机制将对象之间的依赖关系交由框架处理,减低组件的耦合性。
    3.Spring提供AOP技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用。
    4.Spring对于主流的应用框架提供了集成支持。
4.BeanFactory和ApplicationContext有什么区别?
    BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。其中ApplicationContext是BeanFactory的子接口
    1.BeanFactory:是Spring里面最底层的接口,包含各种Bean的定义,读取bean配置文件,管理bean的加载,实例化控制bean的生命周期,维护bean之间的依赖关系。ApplicatinContext接口作为BeanFactory的派生,除了提供BeanFactory所具有的功能外,还提供了更完整的框架功能:
    (1):继承MessageSource,
    (2):统一的资源文件访问方式
    (3):提供在监听器中注册Bean事件
    (4):同时载入多个配置文件
    2.BeanFactory采用的是延时加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化,这样我们就不能及时发现Spring的配置问题,如果Bean的某一个属性没有注入,只有在调用getBean()方法才会抛出异常。
    3.ApplicationContext,他是在容器启动时,一次性的创建所有的bean。这样可以及时发现Spring中存在的配置错误,这样有利于检查所有依赖属性是否注入。
    4.相对于基本的BeanFactory,ApplicationContext唯一的不足就是占用内存空间,当应用配置Bean较多时,程序启动较慢。
5.Spring的生命周期
    servlet的生命周期:实例化,初始化init,接受请求service,销毁destory
    spring的生命周期:
        1.实例化bean
        2.设置对象属性
        3.处理Aware接口
        4.BeanPostProcessor(前置处理,对Bean进行一些自定义处理)
        5.InitializingBean 与 init-method如果Bean在Spring配置文件中配置了init-method属性,则会自动调用其配置的初始化方法。
        6.后置处理,如果实现了BeanPostProcessor则调用方法处理
        7.DisposableBean当Bean不再需要时,对Bean进行清理
        8.destory-method:结束
6.Spring支持的几种Bean的作用域
    1.singleton:默认,每个容器中只有一个bean实例,单例模式由BeanFactory自身来维护。
    2.prototype:为每一个bean请求提供一个实例。
    3.request:为每一个网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收
    4.session:与request范围相似,确保每个session中有一个bean实例,session过期后,bean会随之失效。
    5.global-session:全局作用域
7.Spring框架中的单例Bean时线程安全的吗?
    Spring框架并没有对单例Bean进行任何多线程的封装处理,大部分的Spring Bean并没有可变的状态,所以在某种程度上Spring的单例Bean是线程安全的;如果bean有多种状态的话,就需要自己保证线程安全。最浅显的解决办法就是将多态bean的作用域由“singleton”变为“prototype”。
8.Spring如何处理线程并发问题
    Spring对一些Bean中非线程安全状态采用ThreadLocal进行处理,解决线程安全问题。
    ThreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题。同步机制采用的是“时间换空间”的方式,仅提供一份变量,不同的线程在访问钱需要获取锁,没获得锁的需要去排队。而ThreadLocal采用了“空间换时间的方式”。
    ThreadLocal会为每一个线程提供一个独立的变量副本,从而隔离了多个线程对数据访问的冲突。因为每一个线程都拥有自己的变量副本,从而也就没必要对该变量进行同步了,ThreadLocal提供了线程安全的共享对象,在编写多线程代码时,可以把不安全的变量封装进ThreadLocal。
9.Spring基于XML注入bean的几种方式
    1.set方法注入
    2.构造器注入
    3.静态工厂注入
    4.实例工厂
10.Spring事务的实现方式和实现原理
    Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,Spring是无法提供事务功能的。真正的数据库事务的提交和回滚是通过binlog或者redo log实现的。
    binlog:binlog日志用于记录所有更新了数据或者已经潜在更新了数据的所有语句,语句以“事件”的形式保存,他描述数据更改。作用是用于实时备份。
    redo log:redolog通常是物理日志,记录的是数据页的物理修改,而不是某一行或某几行修改成怎样,它用来恢复提交后的物理数据页(恢复数据页最后一次提交的位置)
11.Spring事务的种类主要分为编程式事务管理和声明式事务管理两种方式
    1.编程式事务管理使用TransactionTemplete。
    2.声明式事务管理建立在AOP之上的,其本质是通过实现AOP功能,对方法前后进行拦截,将事务处理的功能编到拦截的方法中,也就是在目标方法开始之前加入一个事务,在执行目标方法之后根据执行情况提交或者回滚事务。
    声明式事务管理只要加上注解就可以获得完全的事务支持,不足的是无法做到像编程式事务那样可以做用到代码块级别。
12.Spring通知有哪些类型》
    1.前置通知(Before advice):在某连接点(join point)之前执行的通知
    2.返回后通知(After returning advice):在某连接点(join point)正常完成后执行的通知
    3.抛出异常后通知(After throwing advice):在方法抛出异常退出时执行的通知。
    4.后通知(After (finally) advice):当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)
    5.环绕通知(Around Advice):包围一个连接点(join point)
13.Spring的隔离级别
    ① ISOLATION_DEFAULT:数据库的默认隔离级别
    ② ISOLATION_READ_UNCOMMITTED:读取未提交,允许另外一个事务可以看到这个事务未提交的数据。
    ③ ISOLATION_READ_COMMITTED:读取已提交,保证一个事务修改的数据提交后才能被另一事务读取,而且能看到该事务对已有记录的更新。
    ④ ISOLATION_REPEATABLE_READ:可重复读,保证一个事务修改的数据提交后才能被另一事务读取,但是不能看到该事务对已有记录的更新。
    ⑤ ISOLATION_SERIALIZABLE:一个事务在执行的过程中完全看不到其他事务对数据库所做的更新。
    ⑤ ISOLATION_SERIALIZABLE:一个事务在执行的过程中完全看不到其他事物对数据库的更新
14.SpringMVC中的拦截器和Servlet中的filter的拦截器有什么不同?
    SpringMVC的拦截器主要是进行拦截请求,通过handler进行处理的时候拦截,servlet是基于函数回调,servlet可以被多次调用,SpringMVC只能在初始化的时候被调用一次。

Spring

标签:com   lookup   bin   npos   部分   功能   声明式   redo   服务   

原文地址:https://www.cnblogs.com/tk970803/p/11099023.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!