河北工业大学城市学院2019级 Java企业级系统管理期末复习资料
Spring框架提供了大量注解机制,在实际应用中存在一些常见的误解与误用情形。其中最常见的错误使用场景是将@Autowired用于实现IoC(注入模式),具体负责对象实例的创建与生命周期管理。
在MySQL中的Mybatis框架中,对于ResultType的相关说法存在错误,其具体表现形式为:即使Pojo属性名与SQL语句查询出的字段不一致,同样可以通过resultType来进行结果映射
关于Ajax用法说明正确的是:Ajax异步调用依赖Ajax引擎
Spring的核心组件构成其他模块的基础架构,请问哪一个不属于该系统的关键组成部分?AOP组件
以下哪些注解不是SpringBoot提供的:Configuration
下列不属于AOP相关注解的是:@ComponentScan
在关于controller, service, dao的相关问题选项中,请找出最准确的答案:controller层向服务层引用,服务层引用dao层,这种联系具有单向性。
MybatisPlus模糊查询以'君'开头应该使用什么关键字:likeRight
MybatisPlus中的BaseMapper中的新增方法有几个?1个
下面关于Mybatis特点说法不正确的一项是:它是一种持久层框架,但不涉及ORM映射
下列关于singleton说法中错误的是:多实例
下列关于SpringMVC的说法中,请找出错误选项:它建立在Spring基础之上的Web框架
动态SQL的
SpringBoot中lombok插件在哪个阶段有效:编译期有效
关于正确代理说明正确的是:正向代理是客户端代理
该文件中存在关于SysMenuMapper.xml的说法存在错误描述,在该文件中,对结果类型的描述与其映射对象无明显差异。
对于接口开发错误的分析涉及以下内容:在Mapper.xml文件中定义的映射命名空间应位于与之相关的接口类路径下。
关于项目部署前后端分离的说法正确的是:单个前端服务能够支持多个后端服务
VUE.js中数组.shift()的作用是:删除第一个元素
正确的说法是:在Inte gra te Spring Boot 的 热 部署中 , 需要 添加 依 赖 包 spring-boot-starter-web , 并后 配置 IDEA 的 工作表 加载 项。
Linux中安装mariaDB数据库的情况描述正确的选项是,在完成安装并启动后,默认情况下仅限于本地连接,并且仅限本地用户进行连接。
下列选项中不具备Spring框架优点的是:支持强大的标签管理
下列不包括maven优点的是:其相较于其他JAR包管理工具而言使用难度较大
nginx并发能力是多少:3-5万次/秒
下面关于Lombok说法不正确的是:Lombok插件添加上依赖就可以启动了
在maven项目的结构中存在一个错误的说法是:其中的目标目录主要用于存储项目的核心.java文件
涉及VUE对象中v-model的使用方法有哪些?具体来说,这些方法常见于用户的输入组件,包括常见的文本框、单选按钮以及复选按钮等。
对于MybatisPlus中的条件构造器来说,正确的描述是:它用于连接where子句
动态查看日志的命令是:tail-fxxx.log
在使用MyBatis进行映射时有哪些方面容易出错:当使用Mapper接口进行查询操作时,其输入参数的数据类型必须与对应的SQL语句中的查询结果数据类型一致
在WEB-INF目录下,必须存放的文件为?web.xml
下面哪项不是response对象的方法?getParameter(Stringstr)
在J2EE中属于Web层的组件有?Servlet
在web.xml中使用标签配置过滤器?
Mybatis中哪些属性可以完成ORM:resultMap
关于同源策略的正确性说明是:当浏览器解析JavaScript并发起Ajax请求时,该过程会触发同源策略
关于JSON说明正确的是:一种轻量级的数据交换格式
属于VUE生命周期方法的是:Mount
关于hosts文件的作用说明正确的是:hosts文件只对本机有效
{}和#{}的区别哪些是错误的:使用预编译
在修改阶段调用的生命周期方法是:updated
关于Mybatis框架说明错误的是:对于Mybatis框架的误解是:该技术是一种全自动化处理ORM与数据库映射关系的技术
JSONP方式可以发送GET或POST请求错
CORS实现跨域资源共享,用来解决跨域问题对
SpringMVC遵循了MVC设计模式,并基于Java实现了响应式请求驱动类型的高效轻量级Web框架。该框架通过将Model、View、Controller分离实现对Web层的责任解耦,并将复杂的Web应用分解成若干功能明确的部分。
BeanFactory作为ApplicationContext的一个子类,并增强了其功能特性,在开发中通常由开发者自行管理应用程序组件
ApplicationContext在启动的时候就把所有的Bean全部实例化了对
BeanFactory在启动时会创建Bean实例,在启动时不将错误生成;而当从容器中取出Bean时也不会生成错误。
基于AOP的技术实现面向切面编程,在这种架构中,每个切面相当于切入点表达式与通知方法组合起来的作用。
在MyBatis框架中,默认提供了核心的事务控制接口(即交集类型),其中包括SqlMapClient;而Hibernate框架中的默认核心事务控制接口则被定义为Session
MyBatis的一个显著特点是支持动态生成SQL语句。在构建复杂的应用程序时,默认情况下会遇到需要根据不同条件动态生成SQL语句的问题,并且这种过程往往较为繁琐。具体操作时需注意,在拼接过程中必须确保适当添加必要的空格,并且特别地,在处理列表时应避免遗漏最后一条列名后的逗号
Spring支持一种不可持续的事务管理接口,并且能够扩展至本地和全局范围的事务
异常处理是Spring官方提供的统一接口将具体技术相关的异常转化为一致的unchecked异常对
SpringCore充当了核心角色,并负责承担所有功能。Spring采用Bean方式进行组织与管理各组件及其相互关系,并由BeanFactory负责生产与管理对象工厂
Spring Web MVC被视为一个核心组件,在构建Web应用程序中发挥着关键作用;作为核心框架设计的基础方案,它提供了一个完整的架构来支持开发过程;依赖于策略接口提供灵活配置的可能性,从而实现了高度可定制的功能。
SpringWeb属于Web框架的一部分,在构建基于Web的应用时起着关键作用。它通过提供丰富的功能和组件集合,在开发过程中显著简化了工作流程。
在Spring框架中嵌入了多个ORM框架模块实现了对象到实体的映射关系从而为ORM对象之间的关系提供了相应的工具支持这些功能全都遵循基于Spring的事务管理和数据访问操作(DAO)异常处理层级架构
Spring Dao 由 JDBC 和 DAO 组件构成;JDBC 和 DAO 的业务层包含有关键性的异常层次结构;这些 Throwable.hierarchy 可以用来处理 Throwable 异常信息从而实现容错性
SpringAop被视为支持切面开发的重要技术,并在现代软件架构中扮演着关键角色。它为面向对象编程提供了重要的支持与提升,并通过组合点对点通信机制实现了跨组件间的动态交互能力。具体而言,在Spring框架中实施AOP时,默认采用了静态代理的方式以确保请求被正确地代理到目标类上。
SpringContext是应用层面的上下文信息传递给Spring框架的作用。
Spring框架中的单例bean是线程安全的错
SpringBean有singleton、prototype、request三个作用域错
Spring的IOC有两种注入方式:setter方法注入,根据注解注入错
切面=切入点表达式or通知方法错
ApplicationContext作为BeanFactory的一个延伸类,在功能上有所拓展,并通常用于开发者自身的操作。
@Bean是标在方法上,用于将方法的返回值对象放入容器对
MVC设计模式采用分离模型、视图和控制器的方法,并实现对Web层职责的解耦。
Controller控制器只是负责处理由DispatcherServlet分发的请求错
在处理请求时,通过URL进行映射的注解是@RequestMapping,在应用中同样也可应用于类或方法中。当应用于类时,则表示该类中所有的响应与请求方法都将以该地址作为父路径进行处理。
@RequestParam位于方法参数前,并用于对输入的参数施加一些约束条件。该标记还能够处理两种不同的异常情况。
SpringMVC支持了拦截器规范接口,并创建了一个类来实现HandlerInterceptor,该类覆盖了接口中的抽象方法对。
MyBatis优势在于通过配置文件和注解实现能够灵活编写原生SQL语句;其不足之处在于,在单表操作时需要编写SQL语句较为繁琐。
MyBatis会对#{}字段进行处理时,在SQL语句中将这些#{}字段转换为'.'字符,并通过调用PreparedStatement对象的set方法来正确赋值相应的参数
说明
该框架设有三层缓存机制,在运行过程中会逐步提升性能表现。其中一级缓存基于的是Sqllink Session对象;二级缓存则依据的是Entity-to-Service(E2S)映射规则;第三层则采用的是Sqllink Session与Entity-to-Service结合的模式
拦截器是SpringMVC所独有的对
SqlSession作为一种多线程对象,在设计上特意考虑了其必须具备的线程安全特性。它在持久化操作中作为共享资源管理的对象存在,并类似于 JDBC 中的 Connection 对象,在底层就封装了 JDBC 连接机制的相关代码。
该MyBatis系统通过读取SqlSessionFactoryBuilder配置文件mybatis-config.xml来实现与数据库的连接。
该应用利用SqlSessionFactoryBuilder参数配置完成与数据库的连接。
Spring的IOC有三种注入方式:构造器注入,setter方法注入,注解注入。
Spring框架支持三类数据绑定模式:直接赋值法、构造实例法以及根据配置文件设置的方式。
在SpringMVC框架中,默认配置包含五个核心组件:包括DispatcherServlet负责处理客户端请求、HandlerMapping负责将控制器映射到对应的URL、Controller用于定义业务逻辑、ModelAndView用于管理数据绑定以及ViewResolver用于管理视图解析。
NGINX常用指令包括启动相关的操作:如启动指定版本的服务使用start nginx指令(即start nginx-(挖出主版本号)),重启服务指定版本的Nginx使用nginx-sreload指令(即restarting nginx-(挖出主版本号)),以及关闭服务指定版本的Nginx服务器使用nginx-sstop指令。
Nginx的主要功能如下:反向代理服务器,实现负载均衡,虚拟主机
调方法Proxy.newInstance方法,方法如下:
public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) throws an IllegalArgumentException
该方法涉及的三个参数包括ClassLoader、接口以及负责处理类的InvocationHandler。
调方法invoke方法,方法如下:
Objectinvoke(Objectproxy,Methodmethod,Object[]args)throwsThrowable
该方法涉及三个必要的参数, 包括被代理的对象, 执行当前方法的对象以及真实的参数.
在Spring框架中,默认情况下会根据应用需求选择合适的实现方式,在其内部提供了三种不同的方法来实现Bean对象的管理功能。这些方法具体包括:通过XML文件进行数据持久化存储的方式、通过JDK接口定义类属性并进行动态注入的方式以及利用Java字面量进行直接赋值的方式。
Spring框架中用到了的设计模式,分别为:代理模式,单例模式,工厂模式。
其主要组成部分包括模型(Model)、视图(View)以及控制器(Controller)。这是一个众所周知的设计面向应用程序基础。
Springbeans被SpringIOC容器赋值配置并维护着这些bean对象;这些bean对象基于容器中配置的元数据进行创建
在控制反转模式下,该应用无法自主管理依赖对象的创建与维护过程;所有相关操作均被外部容器系统完成。
AOP是一种面向切面的技术,在特定时刻动态地将代码插入到类的指定方法或位置上所采用的编程思想就是面向切面的编程。
@Autowire注解是由Spring框架提供的注解,在涉及的领域包括字段、setter方法以及构造器等方面应用,并且装配的方式主要是按照类型来进行处理。
系统通过@Controller注解将Bean从相关类中提取并注入到IoC容器以供使用
基于JDK的反射机制构成了SpringMVC的拦截器。该系统的核心组件负责 intercepting 来自客户端的各种 requests. 在 processing corresponding Handler objects 时实施了相应的 intercept strategies.
Mybatis是一个部分自动化的ORM框架,在其内部封装了JDBC接口,并且在开发过程中开发者只需关注与数据库交互的SQL语句。
MyBatis基于XML或注解配置与映射原生信息,并负责将POJO转换为数据库中的记录;它省去了几乎所有JDBC代码、手动设置参数以及结果集的获取。
MyBatis利用XML文件或注解的方式组织要执行的各种statement,并通过Java对象与statement中的动态参数同时构建最终的SQL语句;最终由MyBatis框架执行这些SQL并将其结果映射回Java对象以供返回。
OR管理技术用于将数据库表中的数据与Java对象进行关联, 这种技术手段旨在解决将关系型数据库中的数据与Java对象(如POJO)建立对应的技术问题
ORM是一种基于描述对象与数据库之间对应关系的元数据技术;它能够将程序中的对象信息自动保存至关系型数据库中。
Mybatis 动态 SQL 可以在 XML 映射文件中以标签的方式构建动态 SQL 表达式,并实现逻辑判断的同时进行 SQL 语句的动态拼接功能。
在SpringMvc框架下使用的控制器通常采用单例模式,在进行多线程访问时存在潜在的不安全问题。避免使用同步关键字以防止性能下降,并确保所有共享资源仅在一个地方定义。解决办法是在控制器内部避免定义共享字段
Mybatis通过将SQL语句从Java源代码中提取并存储到专设的XML文件中便于维护和管理提升了开发效率。
使用Spring框架的优点是简洁的基础版本大约2MB。通过逆向控制实现了松散耦合,并支持面向切面编程将应用业务逻辑与系统服务区分开来。不仅包含了还管理了应用中对象的生命周期与配置。
在SpringMVC框架下处理GET和POST请求出现的中文乱码问题可通过以下步骤得以解决:首先,在项目根目录下的web.xml配置文件中设置一个CharacterEncodingFilter过滤器,并将其过滤器属性值指定为utf-8;其次,在修改tomcat服务器的配置文件时必须确保其使用的字符编码与项目的工程标准一致;最后,在整个处理过程中需要对所有的输入参数进行相应的重新编码处理
AOP交互式开发框架中采用的是异步操作与消息传递机制,在此过程中会生成一系列事件以触发相关组件进行响应处理。
即为了实现对目标对象(如类或实例)的操作而设计的一系列机制包括:
前置事件用于在调用目标对象之前执行操作,
后置事件则用于在调用之后执行,
异常事件用于捕捉并处理运行时错误,
最终事件则负责完成所有操作并释放资源,
而环绕事件则用于处理包围式的上下文信息以实现更复杂的逻辑处理过程
两者均属于接口类型,并且ApplicationContext继承自BeanFactory。此外,其均为Spring框架中的容器对象。
基于AOP的切入点表达式中所指的就是那些满足特定切入条件的判断场景,在这些场景下Spring框架会自动为其创建相应的代理对象。具体而言包括以下几种类型:基于Bean的切面(即Bean表达式)、基于Within关键字及其相关属性限定词(即Within表达式)、基于执行流程的关键字及其相关属性限定词(即Execution表达式)以及注解式的切面(即@Annotation类别的标注型切入符)。
位于客户机与后端服务之间的一台特殊设备称为反向代理服务器,在客户的视角下等同于该后端服务的位置。即客户只需通过访问该反向代理设备即可获取后端服务所需资源,并且无需在客户端进行任何配置。
正向代理是一种连接客户端与原始服务器的中间服务器。它通过转发请求来实现内容传递。具体来说,在这一过程中,客户端会通过代理发送一个请求,并指定该请求的目标为原始服务器。随后,在此基础之上进行操作:将该请求转发至原始服务器,并将接收到的内容反馈回客户端。
截获器能够访问IOC容器中的各个Bean,并且无法实现相应的功能;向拦截器注入Service组件后,则能够执行相应的业务流程。
Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
BeanFactory充当了一个实现了创建和管理Bean的工厂角色,并遵循单工厂模式运作;它作为Spring IoC容器中的顶级接口被定义。
前端逻辑DispatcherServlet无需前端开发者手动编写;其主要功能包括接收到客户端的请求并返回相应的处理结果。类似于信息中转站。
处理逻辑映射器HandlerMapping无需开发者干预,并主要职责是根据请求的URL来查找相应的Handler
视图解析器ViewResolver主要功能是无需由程序员编写代码即可完成工作;其主要职责是负责处理各种视图的解析,并基于视图逻辑名识别并生成相应的真正存在的视图。
Mybatis的优点包括友好易用性;它提供了XML标签支持;同时具备动态SQL编程能力;此外还拥有强大的Mapper映射功能;能够很好地处理对象与数据库ORM之间的关系映射。
Mybatis应用场景:适用于表间关联较多的项目,在持续支持开发流程更新频率较高的项目中应用广泛,在需求变化较为频繁的情况下表现出较好的适应性。
预处理是在执行时对SQL语句完成一次完整的解析。随后注入到数据库中的参数不再单独进行SQL语句的解析与优化。
Mybatis uses the RowBounds object to implement pagination for handling in-memory pagination of ResultSet objects rather than physical page. It is possible to directly include physical page parameters within the SQL statement to achieve physical pagination functionality. Additionally, pagination plugins can be utilized to accomplish physical pagination.
Spring对于循环依赖的解决并非绝对,并且首先需要满足基于scope单例设计以及允许处理具有循环依赖的对象。
拦截器采用了Java的反射机制;而过滤器则依赖于函数回调机制;同时该技术方案并不受限于Servlet容器;相比之下过滤技术则依附于Servlet容器
在HTTPSession框架下,在每个Bean对象与对应的session之间建立绑定关系。这些关联仅限于基于Web的Spring应用环境场景中。
从本质上讲, IoC与DI源自同一理念,但又各自聚焦不同的应用场景.在IoC框架下,主要涉及对Bean进行注册操作;而DI则侧重于Bean的初始化流程.
该类实现了某种功能:在特定位置触发拦截机制,并向相关方发送拦截信号。其中负责在特定位置触发拦截机制的是称为"切点"的部分;而通过该机制向目标业务层发送拦截指令的位置则被定义为"通知"。
ApplicationConext是BeanFactory的一个延伸类,在原有功能基础上增强了支持国际化文本消息处理的能力,并采用了规范化的统一资源文件读取方式和完善的事件传播机制;同时为应用层提供了特殊的配置管理流程以实现优化的应用层配置管理
Mybatis是一款持久层框架,支持定制化SQL,存储过程以及高级映射。
Mybatis支持使用XML或注解作为表示法来表示原生类类型、接口以及Java的POJO为数据库中的记录。
model旨在构建支撑业务的信息架构,并完成模型构建;control模块负责调用业务逻辑生成适合的数据,并将这些数据传递至视图层以展示;视图如何规划数据展示的结构与布局。
在Spring框架中,默认情况下,在编译时阶段对每个被注入类实例化的操作都会被跟踪记录下来,并在运行时阶段执行相应的初始化操作;依赖注入器会自动将各组件之间的依赖关系按照配置文件指定的方式进行赋值;通过配置自动注入模式实现对组件间关系的动态管理。
Spring事务的核心体现在数据库对事务的支持上;真实的数据库层事务提交与回滚机制则采用binlog或redolog的方式进行处理。
在SpringMvc框架下编写的控制器通常采用单例模式,在多线回路访问时可能导致多回路互斥的问题。针对这种情况,无法通过同步关键字实现互斥锁机制,并且建议避免在控制层(controller)中直接声明数据成员或字段。
通过依赖注入技术(IOC),我们能够最大限度地减少代码复杂度;从而显著简化了单元测试的过程;传统的单元测试通常依赖于单例对象或JNDI(Java Naming and Discovery Interface)查找机制;而通过这种方式,在不影响系统整体架构的前提下实现了各组件之间的松散耦合。
在软件架构设计中,默认情况下会存在大量的重复性工作以及复杂的协调逻辑问题。为了避免在代码层面直接拼装组件和服务这一繁琐的过程,则需要采用依赖注入作为解决方案。通常情况下,在配置文件中明确各个组件所需的服务接口后由IOC容器根据配置自动管理这些服务的整合与协调。
如果一个Bean仅作为另一个Bean的属性存在,则可以通过名称重命名将其直接嵌入其中,并将其类型指定为InnerBean;在Spring-based XML configuration metadata中,在
Spring的核心特性是什么?Spring优点?
答:
Spring的核心是控制反转(IoC)和面向切面(AOP)
Spring优点:
1、方便解耦,简化开发
2、AOP编程的支持
3、声明式事务的支持
4、方便程序的测试
5、方便集成各种优秀框架
6、降低JavaEEAPI的使用难度
请介绍一下bean的生命周期
答:
1、bean定义:在配置文件里面用来进行定义。
2、bean初始化:有两种方式初始化:
3、bean调用:有三种方式可以得到bean实例,并进行调用
4、bean销毁:销毁有两种方式
持久层设计的目标包括:
答:
1、数据存储逻辑的分离,提供抽象化的数据访问接口。
2、数据访问底层实现的分离,可以在不修改代码的情况下切换底层实现。
3、资源管理和调度的分离,在数据访问层实现统一的资源调度(如缓存机制)。
4、数据抽象,提供更面向对象的数据操作。
说明如何以自动装配的方式进行依赖注入的五种常见且有效的实现途径:以下具体介绍这五种实现途径。
答:
no:默认的方式是不进行自动装配,通过显式设置ref属性来进行装配。
byName:根据参数名实现自动生成,默认情况下Spring容器会识别并配置为使用名为指定类型的Bean对象进行绑定;当配置文件中定义某一个Bean类拥有autowire属性并将其配置为byName时;系统会自动识别该Bean类并将其实例与对应的接收者进行绑定;这种绑定方式无需额外指定键值对;整个过程完全依赖于Bean自身的命名信息来进行关联操作
byType: 基于参数类型进行自动装配,在Spring容器配置文件中识别到指定bean的autowire属性配置为byType后,系统将尝试匹配并装配与之兼容的对象。若存在多个对象满足条件则会触发异常。
constructors:该方法类似于byType;但必须为该构造函数提供相应的参数;如果无法确定相应的可选参数类型,则会导致异常。
autodetect:主要通过constructor自动生成实例,并在遇到问题时进而采用byType方式进行配置。
解释MyBatis中命名空间(namespace)的作用
答:
在项目开发中可能存在大量的SQL语句,在这种情况下给每一个SQL语句赋予一个独特的标识显得较为困难。针对这一问题,在MyBatis框架中提供了解决方案:通过在每个映射文件中创建一个独特的命名空间来管理这些SQL语句。这样一来,在同一命名空间内的所有SQL语句都会被识别为该命名空间下的独立标识符。只要保证各个命名空间内的标识符互不重复,则即使来自不同映射文件的相同标识符也不会导致冲突的问题出现。
MyBatis中的动态SQL是什么意思?
答:
当我们面对一些较为复杂的查询时,在实际操作中可能会设定多个查询参数。然而,在某些情况下这些参数的存在与否是不确定的。若不采用诸如JDBC等持久层框架技术则需要自行组装SQL语句。然而通过MyBatis提供的动态生成SQL的能力可以有效地解决这一问题
解释MVC模式的好处:
答:
在MVC模式中, 各个层次各自承担特定功能, 并相互之间没有干扰. 因此, 在任何一层发生变化时, 只需要更改相应的层次而不影响其他层次.
-
有利于实现分工协作:采用MVC模式时,在系统架构上将功能划分为视图、逻辑和控制三层结构能够有助于实现分工协作。具体而言,在Web视图层(如JSP)构建网页界面,在业务逻辑层为熟悉业务的开发者负责构建应用逻辑,在应用控制层则由其他开发者负责构建应用流程。
-
促进组件的复用性:经过分层设计后,有助于提升组件复用性. 控制层能够独立作为一个功能完善的组件, 视图层面则可设计成通用的操作界面.
SpingMvc中的控制器的注解一般用哪个?有没有别的注解可以替代?
答:
通常情况下,默认会配置一个带有@Controller注解的Controller类,默认返回json格式的数据;当然也可以选择在网页根目录下创建一个介于根目录与应用逻辑之间的HomeController,并在此基础上注册一个带@Controller注解的Controller类,默认返回html视图数据;实际上这与使用@ResponseBody+@Controller的方式效果相同;此外,在表现层(即页面显示内容)的位置上通常只需要使用到@RequestMapping注解即可;除此之外,则不需要再另外配置其他的注解来实现同样的功能了
SpringMVC常用的注解有哪些?
答:
@RequestMapping标记了请求Url路径,并适用于类或方法;当应用于类时,则表示该类中的所有响应请求的方法均以此地址作为父路径
@RequestBody:通过注解实现了对HTTP请求数量转换为JSON数据,并将其解析为Java对象结构。
在响应体注释中实现了将controller返回对象转为JSON格式的数据以JSON格式发送给客户端
如何自定义注解?
答:
生成一种自定义注解类似于创建接口,并且自定义注解需使用@interface来指定
添加元注解信息,比如@Target、@Retention、@Document、@Inherited等
创建注解方法,但注解方法不能带有参数
注解方法返回值为基本类型、String、Enums、Annotation或其数组
注解可以有默认值;
Spring中重要的注解哪些,并分别解释他们的用途
答:
@Controller:用于SpringMVC项目中的控制器类。
@Service:用于服务类。
@Repository:用于dao层。
@RequestMapping:用于在控制器处理程序方法中配置URI映射。
@ResponseBody:该字段用于返回一个Object类型的对象,默认情况下会将其转换为JSON格式进行传输。它常用于返回XML或JSON格式的数据。
@PathVariable:用于将动态值从URI映射到处理程序方法参数。
@Autowired:用于在springbean中自动装配依赖项。
@Qualifier:采用Autowired注解的方式,则可防止在存在多个Bean类型实例时产生混淆情况。
@Scope:用于配置springbean的范围。
@Configuration,@ComponentScan和@Bean:用于基于java的配置。
@Aspect,@Before,@After,@Around,@Pointcut:用于切面编程(AOP)。
SpringBean有哪些作用域,它们之间有什么区别?
答:
single example pattern typically assigns a default range. this range ensures that regardless of the number of requests processed, each container will contain only one instance of such an entity. the single instance pattern is managed internally by the framework.
prototype:原形范围与单例范围相反,为每一个bean请求提供一个实例。
request:每当有一个客户端发起网络请求时,在该范围内的每个request都会创建一个实例;当所有这些请求都已处理完毕后,在该范围内的beans会被垃圾回收机制清理掉。
Session类似于Request Range:保证每一个Session中都有一个Bean实例,并且当Session过期时(进而导致)Bean也会失效。
全球会话:与所有Portlet应用相关联。当一个应用程序被部署到Portlet容器中运行时,在其内部包含了多个不同的Portlet组件。如果希望所有Portlet组件能够共享同一个全局的数据存储空间,则需要将这个全局的数据存储空间配置为位于global-session的位置。
请解释一下SpringBean容器的生命周期流程?
答:
Spring容器根据配置中的bean定义中实例化bean。
Spring使用依赖注入填充所有属性,如bean中所定义的配置。
当Object bean满足BeanNameAware接口时,工厂基于传递过来的bean ID所驱动地执行设置BeanName的行为。
如果一个bean遵循BeanFactoryAware接口,则该对象被配置为使用该类工厂以获取指定 bean。
若有与bean相关联的任意BeanPostProcessor存在,则会触发preProcessBeforeInitialization()方法
如果为bean指定了init方法的init-method属性,那么将调用它。
如果有与bean相关联的每一个BeanPostProcessor存在时,则会执行postProcessAfterInitialization()方法
如果Bean继承DisposableBean接口,在Spring容器关闭时会被调用destroy方法。
如果为bea指定了destroy方法的destroy-method属性,那么将调用它。
AOP是什么?
答:
即面向切面编程是一种通过预编译机制和动态代理手段实现程序功能统一维护的技术。作为 Object-Oriented Programming(OOCP)的发展成果之一,在软件开发领域一直备受关注;同时它也是 Spring 框架中的核心组件之一,并且属于函数式编程的重要组成部分之一。利用 AOP 可以将业务逻辑划分为独立的部分,在不影响其他部分的情况下实现解耦;这样不仅降低了各部分之间的耦合度,并且提高了系统的可重用性以及整体开发效率;而 Spring 框架中采用 AOP 技术时,默认情况下会通过代理对象对被代理的方法进行动态扩展。
解析SpringMVC五大组件的含义及其作用
答:
DispatcherServlet:作为前置控制器,在web.xml文件中进行配置;负责拦截并匹配请求;允许我们根据需求自定义拦截匹配规则;被相应的规则引导后会自动分配至目标Controller进行处理。前端控制器的设计模式实现了提供SpringWebMVC集中访问点的功能;并且负责职责范围内的分派工作;同时通过seamless integration with SpringIOC container实现了无缝集成并获得了所有Spring的好处。
HandlerMapping功能:该功能的主要作用是接收并分配请求到相应的控制器中,并通过特定机制实现与控制器之间的关联关系。在应用开发过程中,默认情况下会配置一个典型的HandledServiceMap实例来完成这一任务。当系统运行时,在容器中将所有已注册的HandlerMapping实例进行逐一检查,并根据其具体实现类型来查找对应的Handler对象进行绑定操作
Controller(控制器)负责接收并处理通过DispatcherServlet分发来的请求,在经过业务处理层的处理后将数据封装成一个Model对象,并将该Model传递给相应的View来展示信息。
该组件用于整合业务处理器处理后的数据内容以及相应的展示内容。通过ModelAndView类实现了对处理后数据结果与展示形式的一键式管理功能,在SpringMVC框架下起到桥梁作用。具体来说,在业务处理器完成请求处理后会将计算得到的结果数据保存至该组件的数据属性中(data属性),并将需要展示的内容信息存入显示内容属性(view属性)。随后组件将根据配置文件中的视图解析器设置自动完成对象解析流程,并将计算出的结果数据显示到指定页面上。
ViewResolver即视图解析器,在系统中负责将逻辑上的视图名称转换为真实的视图实例。当DispatcherServlet接收到请求时,在HandlerMapping配置下指示相应的Controller来处理该请求。Controller接收此指令后会执行必要的操作,并将处理后的结果包装为ModelAndView对象并返回给DispatcherServlet。随后 DispatcherServlet 根据 ViewResolver 的解析结果调用对应的视图组件以生成所需的页面内容。
SpringMVC的处理流程
答:
客户端向服务端发起请求
过滤后的请求会被DispatcherServlet前端控制器接收,并同时启动SpringMVC相关的配置
前段服务DispatcherServlet负责接收并发送至HandlerMapping对象进行处理。
HandlerMapping对象基于URL接收请求的对象执行链,并按照顺序首先启动拦截器组件,随后启动后端处理逻辑。
通过后台控制器的处理流程将生成的视图信息以及相关的数据内容被封装进一个ModelAndView对象实例中,并在完成后将其传递给SpringMVC框架使用
SpringMVC负责解码高层功能模块的输出结果,并在此基础上进行进一步优化。
请求处理结束,返回客户端相关信息
SpringMVC的拦截器和过滤器什么区别
答:
SpringMVC中的拦截器interceptors负责对控制器controller实施预处理和后处理的方法;
可以通过构建拦截器链的方式,在处理被拦截的对象时依次触发一系列预先定义好的拦截逻辑机制,在此过程中系统会按照设定好的顺序执行各项防御措施以达到保护系统正常运行的目的
拦截器interceptor与过滤器filter的区别
过滤器是servlet中的,任何框架都可以使用过滤器技术;
拦截器是SpringMVC所独有的
过滤器设置/*可以拦截任何资源
拦截器只对控制器controller中的方法进行拦截
拦截器利用的是AOP思想;
自定义拦截器,需要实现HandlerInterceptor接口
SpringMVC统一异常处理的思想和实现方式
答:
在应用SpringMVC后,代码的执行路径会被SpringMVC框架识别,这意味著一旦发生错误,该错误会立即被传递给框架内部进行处理
开发一个自定义的异常处理单元(需遵循HandlerExceptionResolver接口),配置内部的异常处理逻辑,并让Spring容器负责管理该异常处理单元。
在类上加注解(@ControllerAdvice)表明这是一个全局异常处理类
为方法添加@ExceptionHandler注解,在其中设置一个value属性来指定可处理的异常类型。
Mybatis的工作原理
答:
mybatis应用程序基于SqlSessionFactoryBuilder读取mybatis-config.xml配置文件
SqlSessionFactory的实例直接开启一个SqlSession
再通过SqlSession实例获得Mapper对象
执行Mapper映射的SQL语句,完成对数据库的CRUD和事务提交
关闭SqlSession
MyBatis中resultType和resultMap的区别
答:
若是实体类的字段和数据库的字段一一对应,则可直接用resultType。
如果数据库中的字段与实体类型对应的字段之间并非一对一关系,则必须使用resultMap属性,并在两者之间建立映射关系。
它们(即 resultType 和 resultMap)都是返回对象。 resultType 实体类字段应与数据库字段一一对应。 而 resultMap 如果两者 fields 名称不一致,则可通过定义特定的 mapping 表来实现不同名称之间的关联。
MyBatis中用于实现动态SQL的元素主要有
答:
if语句简单的条件判断
选型,在什么情况下使用与其他情况的不同之处类似于Java语言中的switch语句,并与JSTL中对应的choose功能相似。
其主要功能是简化SQL语句中的WHERE子句判断,并且能够巧妙地处理AND/OR逻辑关系。该工具无需担心过多使用可能带来的语法问题
集合(Set)用于执行更新操作,默认功能与where标签相似,在处理包含的语句时会先插入一个集合对象。若处理的语句以逗号分隔,则会自动省略该分隔符;当集合操作返回的结果为空时可能导致错误
trim元素的主要作用是可以在其所包含的内容前面添加一些前缀,在后面添加一些后缀。这些功能与相关的属性prefix和suffix直接相关。此外,trim还可以通过使用prefixOverrides来覆盖包含内容头部的一些内容,并通过suffixOverrides来覆盖尾部的一些内容。最后需要注意的是(trim的功能)它不仅限于上述用途;它还能够主要用来实现where和set的作用
在Java中使用foreach类似于使用for关键字来执行循环操作,在其作用对象通常主要集中在Java集合框架或者基本数据类型上
mybatis缓存机制
答:
Mybatis分为两层缓存机制,在Default配置下SqlSession级别的SqlSession实例会被自动创建并被默认启用;而Mapper级别的SqlSession缓存则会在Default设置下未被预设为启用状态,默认情况下不可更改地保持关闭状态。
当设置'cacheEnabled'为true时, 系统将启用二级缓存机制. 其中第二层缓存采用mapper级别的设计, 若启用了第二层缓存机制, 那么查询数据应遵循以下顺序: 第二层缓存→第一层缓存→最终数据库.
