面试笔录--spring(面试必问)

1.简单介绍:
 Spring是一个开源框架,一个轻量级的Java 开发框架,是完全面向接口的设计,降低程序耦合性,主要是事务控制并创建bean实例对象。在整合ssh、ssm框架中主要充当黏合剂的作用。
 2.Spring框架的核心1(IOC):  
     2.1 控制反转(Inversion of Control)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,它体现了一种设计思想,一种将设计好的对象交给容器来管理,IOC的核心思想体现在*控制*、*反转*上。IOC作为一个容器,里面放的都是bean和bean之间的对应关系,bean之间的对应关系通过xml配置文件来体现。
     2.2 两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。
     2.3 谁控制谁:传 统Java SE程序设计中,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IOC则有专门一个容器来创建对象,即由IOC容器来控制对象的创建。
     2.4 控制什么:主要控制了外部资源获取(不只是对象包括比如文件等)。
     2.5 反转:传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。
     IOC总结:对于IOC而言,它强调是将**主动**变为**被动**,由IOC容器来负责依赖对象的创建和查找,由IOC容器来进行注入组合对象。将原来的强联系、高耦合转变为了**弱关系、松耦合**。IOC最大改变是思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但在IOC/DI思想中,应用程序变为被动,被动的等待IOC容器来创建并注入所需要的资源。
   3.Spring框架的核心2(AOP):  
    3.1  介绍 :AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
    3.2  原理:AOP的做法是把目标类(又称目标对象)保存用户单独提出来,把校验,文件上传,获取用户信息当做切面,这样就很好的做到了解耦把业务逻辑和切面分离,有利于开发和后期维护!
    3.3  主要功能: 日志记录,性能统计,安全控制,事务处理,异常处理等。
    3.4  通知根据拦截目标类中的目标方法的位置不一样可以分为:**前置通知、后置通知、环绕通知、异常通知
    3.5   JDK代理: 
       1、JDK动态代理:

 

一、概述

  AOP(Aspect Oriented Programming),面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术,是Spring框架中的一个重要内容。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可用性,提高开发效率。

  主要功能体现在:日志记录,性能统计,安全控制,事务处理,异常处理等。

  主要概念:

  • 切面(Aspect):要实现的交叉功能,是应用系统模块化的一个切面或领域,常见的例子就是日志记录
  • 连接点(JoinPoint):应用程序执行过程中插入切面的地点,可以是方法调用,异常抛出,切面代码在这些地方插入到你的应用流程中,添加新的行为
  • 通知(Advice):通知切面的实际实现,它通知应用系统新的行为
  • 切入点(Pointcut):定义了通知应该在应用在哪些连接点,通常通过指定类名和方法名或者匹配类名和方法名式样的正则表达式来指定切入点
  • 目标对象(Target):被通知的对象,既可以是你编写的类也可以是你要添加定制行为的第三方类

  AOP实现的关键在于AOP框架自动创建的AOP代理,AOP代理主要分为静态代理和动态代理两大类,其中静态代理是使用AOP框架提供的命令进行编译,从而在编译阶段就可以生成AOP代理类,也称为编译时增强,动态代理则在运行时借助于JDK动态代理、CGLIB等在内存中临时生成的动态代理类,也被称为运行时增强。静态代理以AspectJ为代表,动态代理则以Spring AOP为代表。

1.什么是spring:

spring是一个开源级的具有容器性质的轻量级框架

具体描述Spring:

  •     轻量级:Spring是非侵入性的,基于Spring开发应用中的对象可以不依赖于Spring的API
  •     控制反转:是面向对象的一中设计原则,用来减低计算机代码之间的耦合度
  •     依赖注入:通过控制反转,对象在被创建的时候,由调控系统将实体所依赖对象的引用传递给它,也可以说,依赖注入都对象中
  •     面向切面编程
  •     容器:Spring是一个容器,因为它包含并且管理应用对象的生命周期
  •     框架:Spring实现了使用简单的组件配置,组合成一个复杂的应用,在spring中可以使用xml和Java注解,组合这些对象
  •     一站式:在IOC和AOP的基础上可以整合各种企业应用的开源框架和游戏的第三方类库(实际上Spring自身也提供了展示层的SpringMVC和持久层SpringJDBC)

2.spring优点有哪些:

  • 降低了组件之间的耦合性 ,实现了软件各层之间的解耦 
  • 可以使用容易提供的众多服务,如事务管理,消息服务等 
  • 容器提供单例模式支持 
  • 容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 
  • 容器提供了众多的辅助类,能加快应用的开发 
  • spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等 
  • spring属于低侵入式设计,代码的污染极低 
  • 独立于各种应用服务器 
  • spring的DI机制降低了业务对象替换的复杂性 
  • Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部 

3.什么是DI机制? 

依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色 
需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中 
创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者 
因此也称为依赖注入。 
spring以动态灵活的方式来管理对象 , 注入的两种方式,设置注入和构造注入。 
设置注入的优点:直观,自然 
构造注入的优点:可以在构造器中决定依赖关系的顺序。 


4.什么是AOP? 

面向切面编程(AOP)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面 

  • 面向切面编程提供声明式事务管理 
  • spring支持用户自定义的切面 

面向切面编程(aop)是对面向对象编程(oop)的补充, 
面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。 
AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽象, 
是对应用执行过程中的步骤进行抽象,从而获得步骤之间的逻辑划分。

5.aop框架具有的两个特征:

  • 各个步骤之间的良好隔离性 
  • 源代码无关性 

你可能感兴趣的:(Spring)