八股文-持续更新......

本文详细介绍了Spring框架的核心概念、设计目标和优势,包括依赖注入、面向切面编程,以及SpringBoot的自动化配置、启动流程。同时,讨论了Spring在微服务、数据库、消息中间件、网络编程等方面的应用,如Zookeeper、Mybatis和Elasticsearch。此外,还涵盖了Spring框架中如AOP、事务管理、安全性、数据持久化等方面的关键知识点,以及如何在实际开发中实现session共享和API文档的维护。
摘要由CSDN通过智能技术生成

Spring

  1. 什么是Spring?

    Spring是一个轻量级的Java开发框架,目的是为了解决企业级应用开发中业务逻辑层和其他层的耦合问题,为java应用提供全面的基础架构支持,Spring负责基础架构,Java程序开发者则专注于应用程序的开发。

    spring的使命是简化Java开发,Spring为企业级开发提供了丰富的功能,这些功能依赖于两个核心特性:依赖注入和面向切面编程

  2. Spring框架的设计目标,设计理念,和核心是什么

    设计目标:为开发者提供一站式轻量级开发平台

    设计理念:Spring通过Ioc容器实现对象耦合关系的管理,并实现了依赖反转,将对象之间的关系交给Ioc容器,实现解耦

    设计核心:通过Ioc容器管理pojo对象以及他们之间的耦合关系,通过AOP以动态非侵入的方式增强服务;Ioc让相互协作的组件保持松散的耦合,AOP编程允许把遍布应用各层的功能分离出来形成可重用的功能组件

    1. Spring框架能带来哪些好处?
    1. 依赖注入方法使得构造器和javaBean的依赖关系非常清晰
    2. Ioc容器更加趋向于轻量级,在有限的资源下使得应用程序的开发和发布变得十分有利
    3. Spring没有闭门造车,它利用了已有的技术如:ORM框架,视图技术等
    4. Spring框架是按照模块的形式组织的,由包和类的编号就可以看出其所属的模块
    5. 要测试一项用Spring开发的应用程序非常简单,测试相关的环境代码都包含在框架中
  3. 什么是控制反转(IoC)?什么是依赖注入?

    控制反转的核心是:将对象的创建权交出去,将对象和对象之间关系的管理权交出去,由第三方容器来负责创建与维护

    控制反转常见的实现方式:依赖注入(Dependency Injection,简称DI)

    依赖注入:

    • 依赖指的是对象和对象之间的关联关系。
    • 注入指的是一种数据传递行为,通过注入行为来让对象和对象产生关系。

    依赖注入是在编译阶段尚未知所需的功能是来自哪个的类的情况下,将其他对象所依赖的功能对象实例化的模式

  4. 依赖注入有什么优势?

    让容器全权负责依赖查询,受管组件只需要暴露JavaBean的setter方法或者带参数的构造器或者接口,使容器可以在初始化时组装对象的依赖关系

  5. 依赖注入实现方式

    1. 构造器依赖注入:构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖。
    2. Setter方法注入:Setter方法注入是容器通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法,即实现了基于setter的依赖注入。
    3. 接口注入由于在灵活性和易用性比较差,现在从Spring4开始已被废弃
  6. 解释一下Spring中的IoC

    Spring 中的 org.springframework.beans 包和 org.springframework.context 包构成了 Spring 框架 IoC 容器的基础,BeanFactory 接口提供了一个先进的配置机制,使得任何类型的对象的配置成为可能,ApplicationContex 接口对 BeanFactory(是一个子接口)进行了扩展,在 BeanFactory的基础上添加了其他功能。

    IOC:把对象的创建、初始化、销毁交给 spring 来管理,而不是由开发者控制,实现控制反转

  7. BeanFactory和 ApplicationContext有什么区别?

    1. BeanFactory 可以理解为含有 bean 集合的工厂类。BeanFactory 包含了种 bean 的定义,以便在接收到客户端请求时将对应的 bean 实例化,BeanFactory 还能在实例化对象的时生成协作类之间的关系,BeanFactory 还包含 了 bean 生命周期的控制,调用客户端的初始化方法(initialization methods)和销毁方法(destruction methods)。

    2. application context 如同 bean factory 一样具有 bean 定义、bean 关联关系的设置,根据请求分发 bean 的功能。但 applicationcontext 在此基础上还提供了其他的功能。

    3. 提供了支持国际化的文本消息

    4. 统一的资源文件读取方式

    5. 已在监听器中注册的 bean 的事件

  8. 是三种较常见的 ApplicationContext 实现方式

    1. ClassPathXmlApplicationContext:从 classpath 的 XML 配置文件中读取上下文,并生成上下文定义
    ApplicationContext context = new ClassPathXmlApplicationContext(“bean.xml”);
    
    1. FileSystemXmlApplicationContext :由文件系统中的 XML 配置文件读取上下文
    ApplicationContext context = new FileSystemXmlApplicationContext(“bean.xml”);
    
    1. XmlWebApplicationContext:由 Web 应用的 XML 文件读取上下文。
  9. Spring有几种配置方式?

    1. 基于XML配置
    2. 基于注解配置
    3. 基于java配置
  10. 如何基于XML的方式配置Spring?

    在 Spring 框架中,依赖和服务需要在专门的配置文件来实现,我常用的 XML 格式的配置文件。这些配置文件的格式通常用开头,然后一系列的 bean 定义和专门的应用配置选项组成。SpringXML 配置的主要目的时候是使所有的 Spring 组件都可以用 xml 文件的形式来进行配置。这意味着不会出现其他的 Spring 配置类型(比如声明的方式或基于 Java Class 的配置方式)Spring 的 XML 配置方式是使用被 Spring 命名空间的所支持的一系列的 XML 标签来实现的。Spring 有以下主要的命名空间:context、beans、jdbc、tx、aop、mvc 和 aso。

  11. 如何基于java的方式配置Spring?

    Spring 对 Java 配置的支持是由@Configuration 注解和@Bean 注解来实现的。由@Bean 注解的方法将会实例化、配置和初始化一个 新对象,这个对象将由 Spring 的 IoC 容器来管理。@Bean 声明所起到的作用与 元素类似。被 @Configuration 所注解的类则表示这个类的主要目的是作为 bean 定义的资源。被@Configuration 声明的类可以通过在同一个类的 内部调用@bean 方法来设置嵌入 bean 的依赖关系。

  12. 基于注解的方式配置Spring

    Spring 在 2.5 版本以后开始支持用注解的方式来配置依赖注入。可以用注解的方式来替代 XML 方式的 bean 描述,可以将 bean 描述转移到组件类的 内部,只需要在相关类上、方法上或者字段声明上使用注解即可。注解注入将会被容器在 XML 注入之前被处理,所以后者会覆盖掉前者对于同一个属性的处理结果。

  13. 什么是SpringBeans?

    Spring beans 是那些形成Spring应用的主干的java对象。它们被Spring IOC容器初始化,装配,和管理。这些beans通过容器中配置的元数据创建。

  14. 一个SpringBean定义包含什么?

    一个Spring Bean 的定义包含容器必知的所有配置元数据,包括如何创建一个bean,它的生命周期详情及它的依赖

  15. 怎样定义类的作用域

    当定义一个 在Spring里,我们还能给这个bean声明一个作用域。它可以通过bean 定义中的scope属性来定义。如,当Spring要在需要的时候每次生产一个新的bean实例,bean的scope属性被指定为prototype。另一方面,一个bean每次使用的时候必须返回同一个实例,这个bean的scope 属性 必须设为singleton

  16. Spring支持的几种bean的作用域

    1. singleton : bean在每个Spring ioc 容器中只有一个实例。

    2. prototype:一个bean的定义可以有多个实例。

    3. request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring

    ApplicationContext情形下有效。

    1. session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域

    仅在基于web的Spring ApplicationContext情形下有效。

    1. global-session:在一个全局的HTTP Session中,一个bean定义对应一个

    实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

  17. Spring中的单例bean是线程安全的吗?

    不是,spring 中的 bean 默认是单例模式,spring 框架并没有对单例 bean 进行多线程的封装处理。

    把“singleton”变更为“pr

  • 28
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

零壹寻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值