zoukankan      html  css  js  c++  java
  • 17个经典的Spring面试问答

    Q1、什么是Spring Framework?

    Spring是Java企业版应用程序开发中使用最广泛的框架.Spring的核心功能可用于开发任何Java应用程序。

    我们可以使用它的扩展来在Java EE平台上构建各种Web应用程序,或者我们可以在简单的独立应用程序中使用它的依赖注入。

    Q2、使用Spring有什么好处?

    Spring旨在简化Java EE开发。以下是使用它的优点:

    • 轻量级: 在开发中使用框架开销很小
    • 控制反转(IoC): Spring容器负责处理各种对象的依赖关系,而不是创建或查找依赖对象
    • 面向切面编程(AOP): Spring支持AOP将业务逻辑与系统服务分开
    • IoC容器: 它管理Spring Bean生命周期和项目特定配置
    • MVC框架: 用于创建Web应用程序或RESTful Web服务,能够返回XML / JSON响应
    • 事务管理: 通过使用Java注释或Spring Bean XML配置文件减少JDBC操作
    • 异常处理: Spring提供了一个方便的API,用于将特定于技术的异常转换为未经检查的异常

    Q3、你知道哪些Spring子项目?简要描述一下。

    • Core - 提供框架基本部分的关键模块,如IoC或DI
    • JDBC - 此模块启用JDBC抽象层,无需对特定供应商数据库执行JDBC编码
    • ORM集成 - 为流行的对象关系映射API提供集成层,例如JPA,JDO和Hibernate
    • Web - 面向Web的集成模块,提供多部分文件上传,Servlet侦听器和面向Web的应用程序上下文功能
    • MVC框架 - 实现模型视图控制器设计模式的Web模块
    • AOP模块 - 面向切面的编程实现,允许定义干净的方法 - 拦截器和切入点

    Q4、什么是依赖注入?

    依赖注入是控制反转(IoC)的一个方面,它是一个通用概念,表明您不是手动创建对象,而是描述应如何创建它们。如果需要,IoC容器将实例化所需的类。

    Q5、我们如何在Spring中注入Bean?

    存在一些不同的选择:

    • Setter注入
    • 构造函数注入
    • 变量注入

    可以使用XML文件或注释完成配置。

    Q6、注入Bean的最佳方法是什么?为什么?

    建议的方法是使用构造函数参数用于强制依赖项,将setter用于可选依赖项。构造函数注入允许将值注入不可变字段并使测试更容易。

    Q7、BeanFactory 和 ApplicationContext 的有什么区别?

    BeanFactory 是一个表示提供和管理bean实例的容器的接口。默认实现在调用 getBean() 时实例化bean 。

    ApplicationContext 是一个接口,表示容纳应用程序中所有信息,元数据和bean的容器。它还扩展了 BeanFactory 接口,但默认实现在应用程序启动时立马实例化bean。可以为单个bean覆盖此行为。

    Q8、什么是Spring Bean?

    Spring Bean是由Spring IoC容器初始化的Java对象。

    Q9、Spring框架中的默认Bean范围是什么?

    默认情况下,Spring Bean初始化为单例 。

    Q10、如何定义bean的范围?

    要设置Spring Bean的范围,我们可以在XML配置文件中使用 Scope 注释或“Scope”属性。

    有五个支持的范围:

    • singleton
    • prototype
    • request
    • session
    • global-session

    Q11、单例Bean是线程安全的吗?

    不,单例bean不是线程安全的,因为线程安全是关于执行的,而单例是一种专注于创建的设计模式。线程安全仅取决于bean实现本身。

    Q12、SpringBean生命周期是什么样的?

    首先,需要基于Java或XML bean定义来实例化Spring bean。可能还需要执行一些初始化以使其进入可用状态。之后,当不再需要bean时,它将从IoC容器中删除。

    所有初始化方法的整个循环显示在下图上:
    Bean生命周期

    Q13、什么是Spring Java注解配置?

    这是以类型安全的方式配置基于Spring的应用程序的方法之一。它是基于XML的配置的替代方案。

    Q14、我们可以在一个项目中拥有多个Spring配置文件吗?

    可以,在大型项目中,建议使用多个Spring配置以提高可维护性和模块性。

    您可以加载多个Java注解的配置:

    @Configuration
    @Import({MainConfig.class, SchedulerConfig.class})
    public class AppConfig {
    

    或者加载一个包含所有其他配置的XML文件:

    ApplicationContext context = new ClassPathXmlApplicationContext("spring-all.xml");
    

    在XML文件中你也可以包含其它配置文件:

    <import resource="main.xml"/>
    <import resource="scheduler.xml"/>
    

    Q15、什么是Spring Security?

    Spring Security是Spring框架的一个独立模块,专注于在Java应用程序中提供身份验证和授权方法。它还会处理大多数常见的安全漏洞,例如CSRF攻击。

    要在Web应用程序中使用Spring Security,您可以开始使用简单的注解:@EnableWebSecurity。

    Q16、什么是Spring Boot?

    Spring Boot是一个项目,它提供了一组预先配置的框架,以减少用户的配置,以便您可以使用最少量的代码启动并运行Spring应用程序。

    Q17、列举一些Spring Framework中使用的设计模式?

    • 单例模式: 单例范围的bean
    • 工厂模式: Bean工厂类
    • 原型模式: 原型范围的bean
    • 适配器模式: Spring Web和Spring MVC
    • 代理模式: 面向Spring Aspect的编程支持
    • 模板方法模式: JdbcTemplate、HibernateTemplate 等。
    • 前端控制器模式: Spring MVC DispatcherServlet
    • 数据访问对象: Spring DAO支持
    • 模型视图控制器: Spring MVC

    “不积跬步,无以至千里”,希望未来的你能:有梦为马 随处可栖!加油,少年!


    关注公众号:「Java 知己」,每天更新Java知识哦,期待你的到来!

    • 发送「1024」,免费领取 30 本经典编程书籍。
    • 发送「Group」,与 10 万程序员一起进步。
    • 发送「面试」,领取BATJ面试资料、面试视频攻略。
    • 发送「JavaEE 实战」,领取《JavaEE 实战》系列视频教程。
    • 发送「玩转算法」,领取《玩转算法》系列视频教程。

  • 相关阅读:
    【leetcode】1215.Stepping Numbers
    【leetcode】1214.Two Sum BSTs
    【leetcode】1213.Intersection of Three Sorted Arrays
    【leetcode】1210. Minimum Moves to Reach Target with Rotations
    【leetcode】1209. Remove All Adjacent Duplicates in String II
    【leetcode】1208. Get Equal Substrings Within Budget
    【leetcode】1207. Unique Number of Occurrences
    【leetcode】689. Maximum Sum of 3 Non-Overlapping Subarrays
    【leetcode】LCP 3. Programmable Robot
    【leetcode】LCP 1. Guess Numbers
  • 原文地址:https://www.cnblogs.com/java-friend/p/11547860.html
Copyright © 2011-2022 走看看