Spring面试题
2024-11-09 21:52:30 0 举报
AI智能生成
Spring是一款流行的Java应用开发框架,它提供了依赖注入(DI)和控制反转(IoC)等功能,旨在简化企业级应用程序的开发。Spring还支持面向切面编程(AOP),允许开发者在不修改源代码的情况下对程序进行扩展和增强。此外,Spring框架还提供了一系列模版和工具类,以支持RESTful Web服务、数据处理、安全等常见需求。在面试中,面试官可能会提问有关Spring的核心概念、DI和IoC的原理、AOP的应用场景等。
作者其他创作
大纲/内容
springmvc核心
SpringMVC的核心
DispatcherServlet
SpringMVC的几个组件
DispatcherServlet : 前端控制器,也叫中央控制器。相关组件都是它来调度。
HandlerMapping : 处理器映射器,根据URL路径映射到不同的Handler。
HandlerAdapter : 处理器适配器,按照HandlerAdapter的规则去执行Handler。
Handler : 处理器, 由我们自己根据业务开发。
ViewResolver : 视图解析器,把逻辑视图解析成具体的视图。
View : 一个接口,它的实现支持不同的视图类型 (freeMaker,JSP等)
SpringMVC工作流程
1.用户请求旅程的第一站是DispatcherServlet。
2.收到请求后, DispatcherServlet调用HandlerMapping,获取对应的Handler。
3.如果有拦截器一并返回。
4.拿到Handler后,找到HandlerAdapter,通过它来访问Handler,并执行处理器。
5.执行Handler的逻辑。
6.Handler会返回一个ModelAndView对象给DispatcherServlet。
7.将获得到的ModelAndView对象返回给DispatcherServlet。
8.请求ViewResolver解析视图,根据逻辑视图名解析成真正的View。
9.返回View给DispatcherServlet。
10.DispatcherServlet对View进行谊染视图。
11.DispatcherServlet响应用户。
springboot介绍
什么是SpringBoot?
通过Spring Boot,可以轻松地创建独立的,基于生产级别的Spring的应用程序,您可以“运行”它们。大 多数Spring Boot应用程序需要最少的Spring配置。
SpringBoot的特征?
创建独立的Spring应用程序
直接嵌入Tomcat,Jetty或Undertow (无需部署WAR文件)
提供固化的“starter”依赖项,以简化构建配置
尽可能自动配置Spring和3rd Party库
提供可用于生产的功能,例如指标,运行状况检查和外部化配置
完全没有代码生成,也不需要XML配置
springboot核心内容
SpringBoot启动类注解?它是由哪些注解组成?
@SpringBootApplication
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的项。
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
@ComponentScan:Spring组件扫描
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的项。
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
@ComponentScan:Spring组件扫描
SpringBoot支持配置文件的格式
1.properties
java.xiaokaxiu.name = xiaoka
2.yml
java :
xiaokaxiu:
name: xiaoka
application.properties和application.yml文件可放位置?优先级?
1. 外置,在相对于应用程序运行目录的/config子目录里。
2. 外置,在应用程序运行的目录里。
3. 内置,在config包内。
4. 内置,在Classpath根目录。
这个列表按照优先级排序,优先级高的会覆盖优先级低的。
当然我们可以自己指定文件的位置来加载配置文件。
java -jar xiaoka.jar ——— spring.config.location=/home/application.yml
bootstrap.yml 和application.yml?
bootstrap.yml 优先于application.yml
SpringBoot自动配置原理?
@EnableAutoConfiguration (开启自动配置)
该注解引入了AutoConfigurationImportSelector,该类中的方法会扫描所有存在META- INF/spring.factories的jar包。
SpringProfiles
什么是SpringProfiles?
一般来说我们从开发到生产,经过开发(dev)、测试(test)、上线(prod)。不同的时刻我们会用不同的 配置。 Spring Profiles 允许用户根据配置文件 (dev ,test ,prod 等)来注册 bean。它们可以让我们自 己选择什么时候用什么配置。
不同的环境的配置文件?
可以是 application-{profile}.properties/yml ,但默认是启动主配置文件application.properties,一般来 说我们的不同环境配置如下。
application.properties:主配置文件
application-dev.properties:开发环境配置文件
application-test.properties:测试环境配置文件
application.prop-properties:生产环境配置文件
如何激活某个环境的配置?
yml:
spring :
profiles :
active: dev
spring :
profiles :
active: dev
properties:
spring.profiles.active=dev
命令行:
java -jar xiaoka-v1.0.jar ——— spring.profiles.active=dev
spring介绍
Spring框架?
Spring框架是由于软件开发的复杂性而创建的, Spring使用的是基本的JavaBean来完成以前只可能由 EJB完成的事。从简单性、可测性和松更合性角度而言,绝大部分Java应用都可以用Spring。
Spring的整体架构?
大约分为20个模块。
Spring可以做什么?
Spring的优点?缺点?
优点:
Spring属于低侵入设计。
IOC将对象之间的依赖关系交给Spring,降低组件之间的更合,实现各个层之间的解更,让我们更专注 于业务逻辑。
提供面向切面编程。
对各种主流插件提供很好的集成支持。
对事务支持的很好,只要配置即可,无须手动控制。
缺点:
依赖反射,影响性能。
你能说几个Spring5的新特性吗
spring5整个框架基于java8
支持http/2
Spring Web MVC支持最新API
Spring WebFlux 响应式编程
支持Kotlin函数式编程
spring核心
IOC
IOC
负责创建对象、管理对象(通过依赖注入)、整合对象、配置对象以及管理这些对象的生命周期。
什么是依赖注入
依赖注入是Spring实现IoC的一种重要手段,将对象间的依赖关系的控制权从开发人员手里转移到容 器。
IOC注入哪几种方式
1.构造器注入
2.setter注入
3.接口注入(我们几乎不用)
IOC优点?缺点?
优点:
组件之间的解糯,提高程序可维护性、灵活性。
缺点:
创建对象步骤复杂,有一定学习成本。
利用反射创建对象,效率上有损。(对于代码的灵活性和可维护性来看, Spring对于我们的开发带来 了很大的便利,这点损耗不算什么喷)
bean
bean 的生命周期?
1.Spring 对bean进行实例化。
2.Spring将值和bean的引用注入到 bean对应的属性中。
3.如果bean实现了BeanNameAware接口, Spring将bean的ID传递给setBeanName()方法。
4.如果bean实现了BeanFactoryAware接口, Spring将调用setBeanFactory()方法,将 bean所在的应用引 用传入进来。
5.如果bean实现了ApplicationContextAware接口, Spring将调用setApplicationContext()方法,将bean 所在的应用引用传入进来。
6.如果bean实现了BeanPostProcessor 接口, Spring将调用他们的post-ProcessBeforeInitalization()方 法。
7.如果bean实现了InitializingBean接口, Spring将调用他们的after-PropertiesSet()方法,类似地,如果 bean使用init-method声明了初始化方法,该方法也会被调用。
8.如果bean实现了BeanPostProcessor接口, Spring将调用它们的post-ProcessAfterInitialization()方法。
9.此时, bean已经准备就绪,可以被应用程序使用了,他们将一直驻留在应用上下文中,直到该应用被销 毁。
10.如果bean实现了DisposableBean接口, Spring将调用它的destory()接口方法,同样,如果bean使用 destroy-method声明了销毁方法,该方法也会被调用。
Spring中的bean有几种scope?
singleton: 单例,每一个bean只创建一个对象实例。
prototype,原型,每次对该bean请求调用都会生成各自的实例。
request,请求,针对每次HTTP请求都会生成一个新的bean。表示在一次 HTTP 请求内有效。
session,在一个http session中, 一个bean定义对应一个bean实例。
global session:在一个全局http session中, 一个bean定义对应一个bean实例。
Spring有几种配置方式?
基于xml
基于注解
基于Java
基于注解
基于Java
自动装配
Spring从哪两个角度实现自动装配?
组件扫描(component scanning):Spring会自动发现应用上下文中所创建的bean。
自动装配(autowiring):Spring自动满足bean之间的依赖。
自动装配有几种方式?分别是?
no - 默认设置,表示没有自动装配。
byName : 根据名称装配。
byType : 根据类型装配。
constructor : 把与Bean的构造器入参具有相同类型的其他Bean自动装配到Bean构造器的对应入参中。
autodetect :先尝试constructor装配,失败再尝试byType方式。
default:由上级标签的default-autowire属性确定。
几个声明Bean 的注解
@Component
@Service
@Repository
@Controller
AOP
什么是AOP(面向切面编程)?
在软件业, AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运 行期间动态代理实现程序功能的统一维护的一种技术。
切面有几种类型的通知?分别是?
前置通知(Before): 目标方法被调用之前调用通知功能。
后置通知(After): 目标方法完成之后调用通。
返回通知(After-returning): 目标方法成功执行之后调用通知。
异常通知(After-throwing): 目标方法抛出异常后调用通知。
环绕通知(Around): 在被通知的方法调用之前和调用之后执行自定义的行为。
什么是连接点 (Join point)?
连接点是在应用执行过程中能够插入切面的一个点。这个点可以是调用方法时、抛出异常时、甚至修改 一个字段时。
什么是切点(Pointcut)?
切点的定义会匹配通知所要织入的一个或多个连接点。我们通常使用明确的类和方法名称,或是利用正 则表达式定义所匹配的类和方法名称来指定这些切点。有些AOP框架允许我们创建动态的切点,可以根 据运行时的决策(比如方法的参数值)来决定是否应用通知。
什么是切面(Aspect)?
切面是通知和切点的结合。通知和切点共同定义了切面的全部内容。
织入(Weaving)?
织入是把切面应用到目标对象并创建新的代理对象的过程。切面在指定的连接点被织入到目标对象中。
引入(Introduction )?
引入允许我们向现有的类添加新方法或属性。
在目标对象的生命周期里有多个点可以进行织入?
编译期:切面在目标类编译时被织入。 AspectJ的织入编译器就是以这种方式织入切面的。
类加载期:切面在目标类加载到JVM时被织入。它可以在目标类被引入应用之前增强该目标类的字节 码。 AspectJ 5的加载时织入(load-time weaving ,LTW)就支持以这种方式织入切面。
运行期:切面在应用运行的某个时刻被织入。 一般情况下,在织入切面时, AOP容器会为目标对象动 态地创建一个代理对象。 Spring AOP就是以这种方式织入切面的。
AOP动态代理策略?
如果目标对象实现了接口,默认采用JDK 动态代理。可以强制转为CgLib实现AOP。 如果没有实现接口,采用CgLib进行动态代理。
事务
事务的注解是?
@Transaction
Spring事务实现方式有?
声明式:声明式事务也有两种实现方式。
. xml 配置文件的方式。
. 注解方式(在类上添加 @Transaction 注解)。
编码式:提供编码的形式管理和维护事务
什么是事务传播?
springmvc介绍
什么是MVC框架?
MVC全名是Model View Controller,是模型(model)- 视图(view)- 控制器(controller)的缩写, 一种软 件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里 面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
什么是SpringMVC?
SpringMVC是Spring框架的一个模块。是一个基于MVC的框架。
SpringMVC的优点
1.具有Spring的特性。
2.可以支持多种视图(jsp,freemaker)等。
3.配置方便。
4.非侵入。
5.分层更清晰,利于团队开发的代码维护,以及可读性好。
Tips:Jsp目前很少有人用了
0 条评论
下一页