框架篇面试题

本文围绕Spring、Spring Boot和MyBatis展开,介绍了Spring的核心框架、常见容器、注解等,阐述了Spring Boot的优点、配置过程、日志管理和自动装配原理,还讲解了MyBatis的特点、执行流程、分页、缓存、事务管理和动态SQL等内容,适合面试备考。

Spring

1.什么是spring

Spring是一个开源的企业级应用框架。它旨在简化Java开发,特别是企业级应用程序的开发,通过提供一系列基础功能和模块,帮助开发者应对复杂性,实现松耦合、高内聚、易于测试和可扩展的软件系统。Spring框架的核心价值在于其对控制反转(Inversion of Control, IoC)面向切面编程(Aspect-Oriented Programming, AOP)的支持,以及对众多第三方库和标准的整合能力。

2.Spring的核心框架包括哪些?

Spring框架的核心组成部分包括:

1. Spring Core:提供了IoC容器,通过依赖注入(Dependency Injection, DI)机制管理对象的创建、装配和生命周期。容器负责对象的实例化、依赖关系的注入以及对象的生命周期管理,使得代码更加模块化和可测试。

2. Spring AOP:支持面向切面编程,允许将横切关注点(如日志、事务管理、权限控制等)从业务逻辑中解耦,并以声明式的方式统一管理和织入到目标对象的特定执行点。

3. Spring JDBC、Spring ORM和Spring Data:提供对数据库访问的简化支持,包括对JDBC、JPA、Hibernate等多种数据访问技术的封装,以及Spring Data模块提供的基于Repository模式的统一数据访问API。

4. Spring MVC和Spring WebFlux:构建Web应用程序的模型-视图-控制器(Model-View-Controller, MVC)框架,支持RESTful API开发和前后端分离的架构。

5. Spring Test:提供了一套全面的测试支持工具,简化了对Spring应用程序各个层(包括控制器、服务、数据访问层等)的单元测试和集成测试。

6. Spring Security:为应用程序提供全面的安全解决方案,包括认证、授权、密码加密、会话管理等功能。

7. Spring Cloud:一套微服务架构解决方案,包含服务注册与发现、配置管理、负载均衡、熔断降级、分布式追踪等组件,助力构建云原生微服务体系。

3.你在项目中为什么要使用spring

在项目中使用Spring的原因:

1. 简化开发复杂性:Spring通过IoC和DI机制,将对象的创建、依赖管理等工作交由容器处理,极大地降低了代码之间的耦合度,提高了代码的可读性和可维护性。开发者只需关注业务逻辑的实现,而无需关心对象的生命周期管理。

2. 提高生产力:Spring提供了丰富的模块和工具,如MVC框架、模板引擎、数据访问抽象、安全框架等,极大地减少了重复工作,加快了开发速度。同时,Spring的自动装配、AOP等特性,使得开发者可以更专注于业务逻辑,而不是基础设施的搭建。

3. 易于测试:Spring框架鼓励面向接口编程和依赖注入,使得组件易于被mock对象替换,便于进行单元测试和集成测试。Spring Test模块提供了对Spring应用程序的无缝测试支持。

4. 强大的生态系统与社区支持:Spring拥有庞大的开发者社区和丰富的第三方库集成,遇到问题时容易找到解决方案。Spring Boot和Spring Cloud等项目进一步简化了应用程序的搭建和微服务架构的实施。

5. 标准化与扩展性:Spring遵循诸多业界标准(如JSR规范),并且对主流技术(如数据库访问、消息队列、NoSQL数据库、云服务等)有良好的支持和集成,使得应用程序易于与其他系统集成,具有良好的扩展性。

4.Spring的常见容器(Spring boot的常见容器)

两者都使用Spring的IoC(Inversion of Control)容器来管理应用程序中的组件(Bean)及其依赖关系。但是,Spring Boot在容器的使用和配置上进行了大量的自动化和简化。

常见容器:

Spring框架的常见容器:

1. Spring ApplicationContext:这是Spring框架的核心容器,它扩展了BeanFactory接口,不仅提供了Bean的创建、配置和管理功能,还添加了国际化支持、事件传播、资源访问等企业级服务。在Spring应用中,通常通过实现ApplicationContextAware接口或使用ClassPathXmlApplicationContext、AnnotationConfigApplicationContext等类来创建和初始化ApplicationContext。

2. WebApplicationContext:对于Web应用程序,Spring提供了WebApplicationContext,它是ApplicationContext的子接口,专为Web环境设计,能够与Servlet容器(如Tomcat、Jetty等)无缝集成,为Web组件(如Servlet、Filter、Listener等)提供Bean的访问能力。

Spring Boot的常见容器:

1. Spring Boot内置的ApplicationContext:

Spring Boot在启动过程中会自动创建并配置一个ApplicationContext,根据项目的配置和依赖,可能是AnnotationConfigServletWebServerApplicationContext(适用于Servlet环境)或AnnotationConfigApplicationContext(适用于非Web环境)。这个容器继承自Spring的ApplicationContext,包含了所有标准功能,并且Spring Boot对其进行了大量的自动化配置,如自动扫描组件、自动绑定配置属性、自动配置Spring MVC、Spring Data等模块。

2. 嵌入式Servlet容器:Spring Boot的一大特色是它能够“开箱即用”地嵌入各种Servlet容器(如Tomcat、Jetty、Undertow等),无需单独部署这些容器。这些嵌入式容器也是Spring Boot应用程序的一部分,由Spring Boot自动配置和管理。虽然它们不是Spring容器本身,但与Spring容器紧密协作,构成了Spring Boot应用的运行环境。

总结来说,Spring框架和Spring Boot在容器方面的主要差异在于:

•自动化配置:Spring Boot通过@EnableAutoConfiguration注解和spring-boot-autoconfigure模块,实现了大量Spring组件和第三方库的自动配置,极大地简化了容器的配置过程。

•嵌入式Servlet容器:Spring Boot提供了嵌入式Servlet容器的支持,使得开发和部署Web应用程序更为便捷,而传统的Spring框架需要与独立部署的Servlet容器配合使用。

5.常见的Spring注解 Spring MVC注解 Mybatis注解 Spring boot注解

Spring注解:

        1. @Component:标记一个类作为Spring容器中的组件(Bean),是@Service、@Repository、@Controller等注解的基础。

        2. @Service:用于标记业务逻辑层(Service)的类,通常包含应用的核心业务逻辑。

        3. @Repository:用于标记数据访问层(DAO/Repository)的类,通常包含数据库操作或其他持久化操作。

        4. @Controller:标记一个类作为Spring MVC控制器,处理HTTP请求。

        5. @Autowired:自动装配Bean,Spring会根据类型或名称自动将Bean注入到标注了@Autowired的字段、方法或构造函数中。

        6. @Qualifier:配合@Autowired使用,用于当有多个相同类型的Bean时,通过指定Bean的名称来精确注入。

        7. @Value:用于注入配置属性值,可以从属性文件、环境变量等来源获取。

        8. @Configuration:标记一个类作为Spring配置类,类中可以包含@Bean方法来定义Bean。

        9. @Bean:在@Configuration类中声明Bean定义,相当于XML配置中的<bean>元素。

        10. @Profile:标记Bean只在特定的Spring profile激活时生效。

        11. @PostConstruct:标记在Bean初始化完成后执行的方法。

        12. @PreDestroy:标记在Bean销毁前执行的方法。

Spring MVC注解:

        1. @RequestMapping:用于映射HTTP请求到控制器的方法上,可以指定请求路径、HTTP方法、参数、 consumes/produces 类型等。

        2. @GetMapping, @PostMapping, @PutMapping, @DeleteMapping @PatchMapping:分别对应HTTP的GET、POST、PUT、DELETE、PATCH方法,是对@RequestMapping的快捷方式。

        3. @PathVariable:用于将URL路径中的占位符参数绑定到控制器方法的形参上。

        4. @RequestParam:用于将查询参数或表单字段绑定到控制器方法的形参上。

        5. @RequestBody:用于将HTTP请求体中的JSON、XML等数据绑定到控制器方法的形参上。

        6. @RequestHeader:用于将HTTP请求头的值绑定到控制器方法的形参上。

        7. @CookieValue:用于将HTTP请求中的Cookie值绑定到控制器方法的形参上。

        8. @ModelAttribute:用于将请求参数绑定到方法参数或返回值表示的模型对象上,常用于表单数据绑定和数据预处理。

        9. @SessionAttributes:标记控制器类,表示其方法中使用@ModelAttribute注解的模型对象应存储在HttpSession中。

        10. @ControllerAdvice:定义全局的异常处理器、数据绑定器、模型属性处理器等,对所有@Controller生效。

MyBatis注解:

        1. @Mapper:标记一个接口作为MyBatis的Mapper

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值