Spring是一个开源的轻量级Java框架,用于构建企业级Java应用程序。它提供了基础设施、容器、数据访问、事务管理、AOP等功能,简化了Java开发。
核心模块包括IOC容器、AOP、数据访问、事务管理、模型-视图-控制器(MVC)等
依赖注入是将对象所需的依赖关系通过外部注入,而控制反转是由框架负责创建和管理对象。Spring通过IoC容器实现控制反转,实现了依赖注入。
Bean是由Spring IoC容器管理的对象。作用域包括单例(singleton,默认)、原型(prototype)、会话(session)、请求(request)等。
AOP是面向切面编程,用于处理横切关注点。Spring中通过代理和切面实现AOP,可以使用注解或XML配置切面和通知。
Spring事务管理通过声明式事务和编程式事务两种方式实现。可以使用@Transactional
注解声明事务,或者使用TransactionTemplate
编程式管理事务。
一些常见注解包括@Component
(通用组件)、@Service
(服务层)、@Controller
(控制器层),@Autowired
用于自动注入依赖,@Transactional
用于声明事务等。
SpringMVC是Spring框架的一个模块,用于构建基于MVC模式的Web应用程序。它提供了简洁的开发模式、灵活的配置和良好的扩展性,支持RESTful风格。
MVC模式是一种将应用程序分为模型(Model)、视图(View)、控制器(Controller)三层的设计模式。SpringMVC通过前端控制器(DispatcherServlet)和处理器映射器等组件实现MVC模式,将请求映射到相应的控制器进行处理。
控制器负责处理用户请求,并返回相应的视图或数据。可以通过在类上使用@Controller
注解或继承AbstractController
类来创建控制器。
DispatcherServlet是SpringMVC的前端控制器,负责接收所有请求并将它们分发给相应的控制器。它还处理视图解析、异常处理等任务。
请求首先由DispatcherServlet接收,然后由处理器映射器查找匹配的控制器,控制器处理请求并返回ModelAndView,最后由视图解析器解析视图并返回给客户端。
@RequestMapping
注解用于映射请求路径和HTTP方法到具体的控制器方法。它可以设置多种属性,包括路径、请求方法、参数等。
可以通过ModelAndView中的Model对象传递数据,也可以使用@ModelAttribute
注解将数据绑定到方法参数上。在页面中可以使用JSTL或Thymeleaf等标签展示数据。
Spring Boot是一个用于简化和加速Spring应用程序开发的框架。它提供了约定大于配置的开发模式,内嵌了常用的开发工具,简化了配置,使得开发者可以更专注于业务逻辑。(主要回答出来约定大于配置这个关键点)
主要优势包括简化配置、内嵌Web服务器、自动配置、约定大于配置、强大的开发工具、与Spring Cloud的良好集成等。
Spring Boot使用条件化配置(@Conditional注解)和类路径扫描,根据项目的依赖和配置情况,自动配置相关的Beans,减少了手动配置的工作。
在application.properties
或application.yml
中配置数据源的相关属性,如spring.datasource.url
、spring.datasource.username
、spring.datasource.password
。
启动类是带有main
方法的类,使用@SpringBootApplication
注解标记。它的作用是启动应用程序,初始化Spring容器,并执行相应的初始化操作。
Spring Boot通过使用Spring Boot DevTools提供的热部署功能,可以在开发环境中实现应用程序的快速重新加载。
可以通过@ControllerAdvice
和@ExceptionHandler
注解定义全局异常处理器。同时,Spring Boot提供了默认的错误处理机制,可以自定义错误页面。
MyBatis是一个开源的Java持久层框架,用于将数据库操作和Java程序中的对象映射起来,简化数据库操作。
MyBatis是基于SQL语句的,提供了灵活的SQL控制权,而Hibernate是基于HQL(Hibernate Query Language)的,更注重对象的关系映射。
MyBatis将Java对象与数据库表进行映射,通过XML或注解配置SQL语句,并提供SqlSessionFactory创建SqlSession,执行SQL语句与数据库交互。
可以使用MyBatis的<if>
、<choose>
、<when>
等标签,或者使用动态SQL注解构建动态SQL。
一级缓存是SqlSession级别的缓存,而二级缓存是Mapper级别的缓存,可以跨SqlSession共享。
使用insertList
等批量插入方法,或者使用foreach标签构建批量插入的SQL。
resultMap定义了如何将数据库查询结果映射到Java对象,包括字段与属性的对应关系、关联关系等。
MyBatis-Plus是基于MyBatis的增强工具,提供了便捷的增删改查操作,简化了MyBatis的使用。优势包括强大的CRUD操作、代码生成器、Lambda表达式查询等。
Wrapper是用于构建条件查询的对象,可以用于动态拼接SQL条件,实现灵活的查询。
可以使用QueryWrapper
、UpdateWrapper
等Wrapper对象,通过链式调用方法构建查询条件。
代码生成器可以根据数据库表结构自动生成对应的实体类、Mapper接口、Service接口、Controller等代码,提高开发效率。
可以使用Page
对象进行分页查询,MyBatis-Plus会自动处理分页查询的SQL。
MyBatis-Plus提供了@Version
注解用于标识乐观锁字段,在更新时会自动处理版本号的增加。
可以通过@DS
注解切换数据源,同时在配置文件中配置多个数据源的相关信息。
客户端发送请求: 当客户端(通常是浏览器)发送HTTP请求到服务器时,请求首先由Servlet容器(如Tomcat)接收。
DispatcherServlet接收请求: 在Spring MVC中,DispatcherServlet是前端控制器。它是一个Servlet,接收所有的请求并负责协调整个请求处理流程。
HandlerMapping确定处理器: DispatcherServlet通过HandlerMapping(处理器映射器)来确定请求的处理器(Controller)。HandlerMapping将请求映射到相应的Controller类和方法。
Controller处理请求: 一旦找到了适当的Controller,DispatcherServlet将请求传递给该Controller。Controller负责处理请求,执行业务逻辑,并返回一个ModelAndView对象。
ModelAndView: Controller返回的ModelAndView包含了处理结果的数据以及视图名称。Model表示业务数据,View表示视图名称。
ViewResolver解析视图: DispatcherServlet使用ViewResolver(视图解析器)将视图名称解析为实际的View对象。ViewResolver根据视图名称找到对应的视图实现,例如JSP页面、Thymeleaf模板等。
视图渲染: 一旦找到了实际的View对象,DispatcherServlet将Model中的数据传递给View,并触发视图的渲染过程。视图负责将Model中的数据渲染成最终的响应内容。
响应返回: 渲染完成后,视图返回最终的响应给DispatcherServlet,然后DispatcherServlet将响应发送回客户端。
这个整个过程形成了一个MVC(Model-View-Controller)架构模式,其中DispatcherServlet充当了前端控制器,负责协调请求的处理流程。通过HandlerMapping、Controller、ViewResolver等组件的协作,Spring MVC能够灵活、可配置地处理各种请求,并将业务逻辑和视图分离,使代码更加模块化和易于维护。
?
Servlet的生命周期是指从创建到销毁的整个过程,包括以下三个阶段:
加载与实例化:
初始化:
init(ServletConfig config)
方法进行初始化。init
方法中,可以进行一些初始化的操作,如读取配置文件、建立数据库连接等。请求处理与销毁:?
service(ServletRequest request, ServletResponse response)
方法处理请求。service
方法中,根据请求类型(GET、POST等),会分发到对应的doGet
、doPost
等方法进行具体的业务处理。销毁:?
destroy
方法。destroy
方法中,可以进行一些清理工作,如关闭数据库连接等。总体而言,Servlet的生命周期是由Servlet容器负责管理的,开发者可以通过重写init
、service
和destroy
等方法,实现自定义的初始化和清理逻辑,以及对HTTP请求的处理。?