spring和spring boot 相关面试题目

xiaoxiao2021-02-28  235

Spring相关

1.spring的controller是单例还是多例?

默认是单例的。最佳使用:不要在controller中定义成员变量。

优点:高性能,单例不用每次都new,当然快了缺点:单例是不安全的,会导致属性重复使用。

2.如何将controller设置成多例呢?

(1).xml中controller bean的scope属性设置成prototype:原型模式。2.通过注解@Scope("prototype"),将其设置为多例模式。

3.Struts2的action和springMVC的controller的区别?

struts2是类级别的拦截,action是多例的。springMVC是方法级别的拦截,controller是单例的。springMVC的速度一般比Struts2快安全上:Struts2曾经爆出重大漏洞,就是ognl表达式URL注入的漏洞。目前springmvc还没有发现什么漏洞。

4、为什么要用spring: 

(1)AOP 面向切面编程,让一些公共服务(日志、持久性事务等)可以分解成方面并应用到域对象上,但又不会增加对象模型的复杂性。

(2)IOC 控制反转,允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。正如单词 倒置 所表明的,IOC 就像反      过来的 JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight construction),每一个对象都是用     其协作对象构造的。因此是由容器管理协作对象(collaborator)。 

 

5、介绍一下Spring的事务管理: 

事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作。 这样可以防止出现脏数据,防止数据库数据出现问题。 

开发中为了避免这种情况一般都会进行事务管理。Spring中也有自己的事务管理机制,一般是使用TransactionMananger进行管理,可以通过Spring的注入来完成此功能。 

spring提供了几个关于事务处理的

6、解释Dependency injection(依赖注入)和IOC(Inversion of control,控制反转)

依赖注入DI在技术上来讲,依赖注入是一个IOC的特殊实现,依赖注入是指一个对象应用另外一个对象来提供一个特殊的能力,例如:把一个数据库连接已参数的形式传到一个对象的结构方法里面而不是在那个对象内部自行创建一个连接。控制反转和依赖注入的基本思想就是把类的依赖从类内部转化到外部以减少依赖 

应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它。也可以说,依赖被注入到对象中。所以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。 

7、spring中的核心类有那些,各有什么作用? 

BeanFactory:产生一个新的实例,可以实现单例模式 

BeanWrapper:提供统一的get及set方法 

ApplicationContext:提供框架的实现,包括BeanFactory的所有功能 

8、什么是Spring, 它有什么特点 

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 

轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并 且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。 

控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不 是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。 

面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的 业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们 并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。 

 

9.Bean的初始化 

有两种方式初始化Bean。 

在配置文档中通过指定init-method 属性来完成 

在Bean的类中实现一个初始化Bean属性的方法,如init(),如: } 

然后,在配置文件中设置init-mothod属性: 

<bean id=”HelloWorld” class=”com.pqf.beans.HelloWorld”init-mothod=”init” > 

</bean> 

实现 InitializingBean接口 Bean实现InitializingBean接口,并且增加 afterPropertiesSet() 方法: 

public class HelloWorld implement InitializingBean { 

public void afterPropertiesSet() { 

 

10、AOP里面重要的几个名词概念解释: 

切面(Aspect): @Aspect 注解(@AspectJ风格)来实现。 连接点(Joinpoint): 在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。 一个连接点总是代表一个方法的执行。 通过声明一个JoinPoint类型的参数可以使通知(Advice)的主体部分获得连接点信息。 通知(Advice): 在切面的某个特定的连接点上执行的动作。其中包括“around”、“before”和“after”等通知。 通知的类型将在后面部分进行讨论。切入点(Pointcut): 匹配连接点(Joinpoint)的断言。通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行 切入点表达式如何和连接点匹配是AOP的核心:Spring缺省使用AspectJ切入点语法。 引入(Introduction): (也被称为内部类型声明(inter-type declaration))。声明额外的方法或者某个类型的字段。 Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象。 例如,你可以使用一个引入来使bean实现 IsModified 接口,以便简化缓存机制。 

 spring boot 相关

spring boot 优势:

简化配置,简化编码,简化部署,简化监控spring boot最大的优势在于“约定优于配置”的软件设计范式。

Spring boot 约定优于配置的具体产品体现在哪儿

Spring boot starter:在启动过程中会根据约定的信息对资源进行初始化;Spring boot jpa:通过约定的方式自动生成SQL,避免了冗余编码;

Spring boot 启动过程:

到spring boot 启动时会去依赖的starter包下面找spring.factories配置文件;根据文件配置的jar包扫描所依赖的jar根据spring.factories配置加载AutoConfigration类根据@Conditional注解,自动配置,并且把bean注入到spring context中。

也就是,spring boot在启动时,按照约定读spring boot starter的配置信息,根据配置信息初始化资源。

 

Spring boot 核心注解:

@SpringBootConfigration:组合了Configration注解,实现配置文件的功能。@EnableAutoConfigration:打开/关闭 自动配置的功能。@SpringBootApplication:ComponentScan:spring 组件的扫描

Spring Boot 自动配置的原理:

main方法中加入@SpringBootApplication或者@EnableAutoConfigration注解,会自动的去starter包下读spring.factories配置文件。这个配置文件里记录了需要被创建的bean。spring boot 在启动时会扫描项目所依赖的jar包,寻找包含spring.factories文件的jar。根据spring.factories配置加载autoConfigration类,根据@conditional注解 进行自动配置并把bean导致到spring Context中。

什么是java config:

yaml优势:

yaml支持map,list,数组,字符串,boolean,日期;而properties只能配置简单的键值对 

 

 

 

转载请注明原文地址: https://www.6miu.com/read-55775.html

最新回复(0)