Spring面试题部分总结【慨念】

什么是Spring?

spring是一个企业级应用的开源开发框架,主要用来开发java应用,spring框架目标就是简化企业级应用开发。java

Spring用到了那些设计模式?

spring里面用到了大量的设计模式,这里举例比较有表明性的:web

代理模式:在aop中使用比较多 单例模式:在spring配置文件定义的bean默认为单例模式 模板模式:用来解决代码重复问题 工厂模式:BeanFactory用来建立对象的实例。spring

使用Spring框架有什么好处?

1.轻量:spring是轻量的,基本版本大约2MB 2.控制反转;spring经过这个实现了松散耦合,对象给他们依赖,而不是建立对象 3.spring支持面向切面的编程,而且把业务逻辑和系统服务分开 4.spring容器包含管理应用中对象的声生命周期和配置编程

什么是Spring IOC容器?

spring IOC 负责建立对象,管理对象(经过依赖注入),装配对象,配置对象,并管理对象的生命周期设计模式

IOC的优势是什么?

IOC 或 依赖注入把应用的代码量降到最低。它使应用容易测试,最小的代价和最小的侵入性使松散耦合得以实现安全

ApplicationContext一般实现的是什么?

ClassPathXmlApplicationContext:此容器从一个xml文件中加载beans的定义。xml bean 配置文件的全路径名必须提供给他的构造函数。 WebXmlApplicationContext:此容器加载一个xml文件,此文件定义了一个WEB应用的全部bean。网络

Spring有几种配置方式?

基于xml的配置 基于注解的配置 基于java的配置session

什么是Spring的依赖注入?

依赖注入是ioc的一个方面,是指不须要你建立对象,只须要描述对象如何建立,你不在代码里直接组装你的组件和服务,可是要在配置文件里描述哪些组件须要哪些服务,以后一个容器(IOC容器)负责把他们组装起来。并发

有哪些不一样类型的IOC(依赖注入)方式?

构造器依赖注入:构造器依赖注入经过容器触发一个类的构造器来实现的 setting:Setter方法注入是容器经过调用无参构造器或无参static工厂 方法实例化bean以后,调用该bean的setter方法,即实现了基于setter的依赖注入。框架

构造器参数实现强制依赖,setter方法实现可选依赖

解释Spring支持几种bean的做用域?

singleton:这是默认的,单例模式,无论有多少个请求,每一个容器只有一个bean实例化 prototype:它和单例相反为每个请求提供一个实例,原型模式 request:在每个客服端的网络请求建立一个实例,在请求完成后,bean失效并垃圾回收器回收 session:确保每个session中有一个bean实例,在session过时后,bean会随之失效 global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该做用域仅在基于web的Spring ApplicationContext情形下有效。

Spring框架中的单例bean是线程安全的吗?

确定不是线程安全的,当多用户同时请求一个服务时,容器会给每个请求分配一个线程,这是多个线程会并发执行该请求多对应的业务逻辑(成员方法),此时就要注意了,若是该处理逻辑中有对该单列状态的修改(体现为该单列的成员属性),则必须考虑线程同步问题.

. 什么是bean的自动装配?

spring容器可以自动装配相互合做的bean,这意味着容器不须要<constructor-arg>和<property>配置,能经过Bean工厂自动处理bean之间的协做。

自动装配有哪些局限性 ?

重写: 你仍需用 <constructor-arg>和 <property> 配置来定义依赖,意味着总要重写自动装配。 基本数据类型:你不能自动装配简单的属性,如基本数据类型,String字符串,和类。

什么是基于java的Spring注解配置?请举例

@Configuration注解,表示该类是一个配置类,用来定义bean资源 @bean:由@Bean注解的方法将会实例化、配置和初始化一个新对象,这个对象将由Spring的IoC容器来管理 ,@Bean声明所起到的做用与<bean/> 元素相似

怎么开启注解配置

注解装配默认是不开启的,使用必须在配置文件配置context:annotation-config/元素。

@Required 注解

这个注解代表bean的属性必须在配置的时候设置,经过一个bean定义的显示的属性值或经过自动装配,若@Required注解的bean属性未被设置,容器将抛BeanInitializationException

@Autowired 注解

;经过类型来实现自动注入bean。和@Qualifier注解配合使用能够实现根据name注入bean

@Qualifier 注解

@Autowired一块使用,在同一类型的bean有多个的状况下能够实现根据name注入的需求

@Resource 注解

默认是根据name注入bean的,能够经过设置类型来实现经过类型来注入

Spring框架支持的事务管理类型

spring支持两种类型的事务管理: 编程式事务管理:经过编程的方式管理事务,可是极难维护 声明式事务管理:能够将业务代码和事务管理分离,只须要注解和xml配置来管理事务。

你更倾向用那种事务管理类型?

大多数Spring框架的用户选择声明式事务管理,由于它对应用代码的影响最小,所以更符合一个无侵入的轻量级容器的思想。声明式事务管理要优于编程式事务管理,虽然比编程式事务管理(这种方式容许你经过代码控制事务)少了一点灵活性。

什么是Aop

面向切面编程,是一种编程技术,容许程序模块化横向切割关注点,如日志和事务管理

在Spring AOP中关注点和横切关注点有什么不一样?

关注点是一个模块的行为,一个关注点可能会被定义为咱们想要实现的功能,横切关注点是贯穿整个应用程序的关注点,并影响整个应用,好比日志,数据传输

Spring有哪些不一样通知类型?

通知是个在方法执行前或执行后要作的动做,其实是程序执行时要经过SpringAOP框架触发的代码段。

spring切面能够应用五种类型的通知: before:前置通知,在一个方法执行前调用 after:在方法执行后调用的通知,不管方法是否执行成功 after-returning:仅当方法执行完成后执行的通知 after-throwing:在方法抛出异常退出时执行的通知 around在方法执行以前和执行以后都会执行的通知

Spring AOP 代理是什么?

代理是使用很是普遍的设计模式,代理是通知目标对象建立后的对象。

链接点(Joint Point)和切入点(Point cut)是什么?

链接点是程序执行的一个点,例如,一个方法的执行或者一个异常的处理,一个链接点老是表明一个方法执行。举例来讲,全部定义在你的 EmpoyeeManager 接口中的方法均可以被认为是一个链接点,若是你在这些方法上使用横切关注点的话。

切入点是一个匹配链接点的断言或者表达式。Advice 与切入点表达式相关联,并在切入点匹配的任何链接点处运行(好比,表达式 execution(* EmployeeManager.getEmployeeById(...)) 能够匹配 EmployeeManager 接口的 getEmployeeById() )

什么是织入。什么是织入应用的不一样点?

织入是将切面和其余应用类型或对象链接或建立一个通知对象的过程。 织入能够在编译时,加载时或运行时完成。

相关文章
相关标签/搜索