springIOC面试题

article/2025/10/7 11:15:39

1.什么是spring

Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IoC和AOP为内核。含有七大核心模块

2. 简单描述spring的七大模块

在这里插入图片描述
(1)Spring Core:核心容器提供了Spring的基本功能。核心容器的核心功能是用Ioc容器来管理类的依赖关系.Spring采用的模式是调用者不理会被调用者的实例的创建,由Spring容器负责被调用者实例的创建和维护,需要时注入给调用者。这是目前最优秀的解耦模式。
(2)Spring AOP:Spring的AOP模块提供了面向切面编程的支持。SpringAOP采用的是纯Java实现。Spring AOP采用基于代理的AOP实现方案,AOP代理由Ioc容器负责生成、管理,依赖关系也一并由Ioc容器管理,尽管如此,Spring Ioc容器并不依赖于AOP,这样我们可以自由选择是否使用AOP。
(3)Spring ORM:提供了与多个第三方持久层框架的良好整合
(4)Spring DAO: Spring进一步简化DAO开发步骤,能以一致的方式使用数据库访问技术,用统一的方式调用事务管理,避免具体的实现侵入业务逻辑层的代码中
(5)Spring Context:它是一个配置文件,为Spring提供上下文信息,提供了框架式的对象访问方法。Context为Spring提供了一些服务支持,如对国际化(i18n)、电子邮件、校验和调度功能。
(6)Spring Web:提供了基础的针对Web开发的集成特性,例如多方文件上传,利用Servlet listeners进行IoC容器初始化和针对Web的applicationContext.
(7)Spring MVC:提供了Web应用的MVC实现。Spring的MVC框架并不是仅仅提供一种传统的实现,它提供了一种清晰的分离模型,在领域模型代码和web form之间。并且,还可以借助Spring框架的其他特性

3.什么是FactoryBean

spring中有两种Bean:普通Bean和工厂Bean
spring提供了一个FactoryBean的工厂类接口,可以通过实现接口来实例化Bean
FactoryBean接口中有三个方法
①getObject 获取对象
②getObjectType 获取对象类型
③isSingleton 是否单例

4.spring中bean的配置方式

1.xml文件中bean标签配置
2.配置类(springboot支持)
3.注解的方式
4.properties方式

5.通过xml配置bean有哪些

1.通过全类名

    <bean name="helloSpring" class="com.qjk.createBean"><property name="name" value="Spring"></property></bean>

2.通过工厂方法
创建类

public class carFactory{//非静态方法public Car createCar(){Car car = new Car();car.setBrand("QQ");return car;}//静态方法public static Car createStaticCar(){Car car = new Car();return car;}
}

1.非静态方法createCar的注入方式:必须实例化工厂类后才能调用工厂方法

<bean id="carFactory" class="com.qjk.factory.CarFactory"/>
<bean id="car" factory-bean="carFactory" factory-method="createCar">
</bean>

2.静态方法createStaticCar的注入方式

<bean id="car1" class="com.qjk.factory.CarFactory" factory-method="createStaticCar">
</bean>

6.解释一下XMLBeanFactory

XMLBeanFactory是一个bean工厂,当spring使用xml创建bean时需要使用。

7.ApplicationContext通常的实现是什么

1.FileSystemXmlApplicationContext :物理路径,此容器从一个XML文件中加载beans的定义,XML Bean 配置文件的全路径名必须提供给它的构造函数。
2.ClassPathXmlApplicationContext:resources路径下读取,相对路径,此容器也从一个XML文件中加载beans的定义,这里,你需要正确设置classpath因为这个容器将在classpath里找bean配置。
3.WebXmlApplicationContext:web.xml定义此容器加载一个XML文件,此文件定义了一个WEB应用的所有bean

8.怎样定义bean的作用域,解释spring支持几种bean的作用域

bean 定义中的scope属性来定义
1.singleton : bean在每个Spring ioc 容器中只有一个实例。GC不回收spring的单例bean【默认】
2.prototype:一个bean的定义可以有多个实例。 GC回收
3.request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。
4.session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
5.global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

9.spring中bean的三种装配方式

1.xml文件中显式配置
ref=“bean的id”
2.通过注解装配 Bean
类上加注解@Component
扫描类@ComponentScan
3.自动装配——@Autowired

10.BeanFactory和ApplicationContext的区别

BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。其中ApplicationContext是BeanFactory的子接口。
BeanFactory:是Spring里面最顶层的接口,包含了各种Bean的定义,读取bean配置文档,管理bean的加载、实例化,控制bean的生命周期,维护bean之间的依赖关系。BeanFactory 简单粗暴,可以理解为就是个 HashMap,Key 是 BeanName,Value 是 Bean 实例。通常只提供注册(put),获取(get)这两个功能。我们可以称之为 “低级容器”。
ApplicationContext 可以称之为 “高级容器”。因为他比 BeanFactory 多了更多的功能。他继承了多个接口。因此具备了更多的功能。例如资源的获取,支持多种消息(例如 JSP tag 的支持),对 BeanFactory 多了工具级别的支持等待,该接口定义了一个 refresh 方法,用于刷新整个容器,即重新加载/刷新所有的 bean。

11.FactoryBean和BeanFactory的区别

BeanFactory是一个工厂,也就是一个容器,是来管理和生产bean的;
FactoryBean是一个bean,但是它是一个特殊的bean,所以也是由BeanFactory来管理的
它是一个接口,他必须被一个bean去实现,不过FactoryBean不是一个普通的Bean,它会表现出工厂模式的样子,是一个能产生或者修饰对象生成的工厂Bean

12.spring的各大接口

在这里插入图片描述

13.SpringBean的生命周期

首先应该定义Bean,定义Bean的常用方式有三种,(xml,注解,properties)
定义后通过实现BeanDefinitionReader接口来读取Bean的定义
在读取完bean的定义后通过实现BeanFactoryPostProcessor接口对Bean进行增强处理
然后通过反射的方式创建Bean
在对Bean进行初始化操作,通过执行set方法对属性赋值
在属性初始化后执行BeanPostProcessorBefore也就是Bean的前置增强处理
前置处理增强后调用Bean的init方法初始化
初始化后的执行BeanPostProcessorAfter也就是Bean的后置处理
后置处理后就是完整的Bean

14.单例bean的优势

1.减少了新生成实例的消耗新生成实例消耗包括两方面,第一,spring会通过反射或者cglib来生成bean实例这都是耗性能的操作,其次给对象分配内存也会涉及复杂算法。 提供服务器内存的利用率 ,减少服务器内存消耗
2.减少jvm垃圾回收由于不会给每个请求都新生成bean实例,所以自然回收的对象少了。
3.可以快速获取到bean因为单例的获取bean操作除了第一次生成之外其余的都是从缓存里获取的所以很快。

15.Spring框架中的单例bean是线程安全的吗

不是,Spring框架中的单例bean不是线程安全的
spring 中的 bean 默认是单例模式,spring 框架并没有对单例 bean 进行多线程的封装处理。
改变 bean 的作用域,把“singleton”变更为“prototype”,这样请求 bean 相当于 new Bean()了,所以就可以保证线程安全了

16.什么是依赖循环,如何解决

举例
A类:属性B类 B b;找B类型的对象赋值,找不到就等
B类:属性A类 A a;找A类型的对象赋值,找不到就等
互相等待
当A类需要b找不到b时 会对其进行标记,继续往下走 B找a时也是一样 。
spring有监听回调的机制当A监听发现B创建完成后在把属性值附上这样就不会产生循环依赖

17.什么是springIOC

springIOC我们称之为控制反转,在没有使用IOC之前我们需要自己取创建和管理对象,代码的耦合性比较高,在使用了IOC之后Bean对象的创建和管理都交给spring进行,大大降低了耦合度。

18.spring Bean定义的三种方式

1.基于xml配置的
<beans>
<import resource=“resource1.xml” />//导入其他配置文件Bean的定义
<import resource=“resource2.xml” /><bean id="userService" class="cn.lovepi.***.UserService" init-method="init" destory-method="destory"> 
</bean>
<bean id="message" class="java.lang.String"><constructor-arg index="0" value="test"></constructor-arg>
</bean>
</beans>
2.基于注解的配置

@Component:当对组件的层次难以定位的时候使用这个注解
@Controller:表示控制层的组件
@Service:表示业务逻辑层的组件
@Repository:表示数据访问层的组件

3.基于java类的配置

1.使用@Configuration注解需要作为配置的类,表示该类将定义Bean的元数据
2.使用@Bean注解相应的方法,该方法名默认就是Bean的名称,该方法返回值就是Bean的对象。
3.AnnotationConfigApplicationContext或子类进行加载基于java类的配置

@Configuration  
public class BeansConfiguration {  @Bean  public Student student(){  Student student=new Student();  student.setName("张三");  student.setTeacher(teacher());  return student;  }  @Bean  public Teacher teacher(){  Teacher teacher=new Teacher();  teacher.setName("李四");  return teacher;  }  
}  
public class TestCreateBean{  public static void main(String args[]){  AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BeansConfiguration.class);  Student student = (Student) context.getBean("student");Teacher teacher = (Teacher) context.getBean("teacher");System.out.println("学生的姓名:" + student.getName() + "。老师是" + student.getTeacher().getName());  System.out.println("老师的姓名:" + teacher.getName());  }  } 

http://chatgpt.dhexx.cn/article/6skODwoH.shtml

相关文章

77道Spring面试题以及参考答案(2021年最新版)

77道Spring面试题以及参考答案&#xff08;2021年最新版&#xff09;&#xff0c;分享给大家~ 一、Spring概述 1. 什么是spring&#xff1f; Spring是一个轻量级Java开发框架&#xff0c;最早有Rod Johnson创建&#xff0c;目的是为了解决企业级应用开发的业务逻辑层和其他各…

Spring面试题汇总

1、 简述Spring框架 概念 Spring致力于Java EE应用的各种解决方案&#xff0c;是一款轻量级框架&#xff0c;大大简化了Java企业级开发&#xff0c;提供了强大、稳定的功能。 Spring主要有两个目标&#xff1a;一是让先有技术更易于使用&#xff0c;二是促进良好的编程习惯(或者…

最新整理Spring面试题2023

Spring面试专题 1.Spring应该很熟悉吧&#xff1f;来介绍下你的Spring的理解 有些同学可能会抢答&#xff0c;不熟悉!!! 好了&#xff0c;不开玩笑&#xff0c;面对这个问题我们应该怎么来回答呢&#xff1f;我们给大家梳理这个几个维度来回答 1.1 Spring的发展历程 先介绍…

Spring面试题及答案(2021年Spring面试题大全带答案)

最近梳理2021最新 Spring 面试题 全家桶【附答案解析】&#xff0c;包含了 Java基础、Spring、SpringMVC、Redis、SpringCloud、设计模式、等多个类型。 今天这篇是关于 Spring 全家桶面试题&#xff0c;总结了 110 道经典问题。 这套Spring面试题大全&#xff0c;希望对大家…

spring的15个经典面试题

总结Spring框架的15个经典面试题。 什么是Spring框架&#xff1f; Spring是一种轻量级框架&#xff0c;旨在提高开发人员的开发效率以及系统的可维护性。 我们一般说的Spring框架就是Spring Framework&#xff0c;它是很多模块的集合&#xff0c;使用这些模块可以很方便地协…

Spring常见面试题汇总(超详细回答)

1.什么是Spring框架&#xff1f; Spring框架是一个开源的Java应用程序开发框架&#xff0c;它提供了很多工具和功能&#xff0c;可以帮助开发者更快地构建企业级应用程序。通过使用Spring框架&#xff0c;开发者可以更加轻松地开发Java应用程序&#xff0c;并且可以更加灵活地组…

Spring常见的77道面试题及答案(2022版)

一、Spring概述 1. 什么是spring&#xff1f; 2. Spring框架的设计目标&#xff0c;设计理念&#xff0c;和核心是什么&#xff1f; 3. Spring的优缺点是什么&#xff1f; 4. Spring有哪些应用场景 5. Spring由哪些模块组成&#xff1f; 6. Spring 框架中都用到了哪些设计模式&…

Spring常见面试题55道(附答案2023最新版)

1、什么是 Spring 框架&#xff0c;它的优点是什么&#xff1f;它的主要功能是什么&#xff1f; Spring 框架是一个开源的 Java 框架&#xff0c;主要用于开发企业级 Java 应用程序。它提供了一组强大的功能和工具&#xff0c;使得开发者能够更加容易地构建高效、可维护和可扩…

【2022最新Java面试宝典】—— Spring面试题(75道含答案)

目录 1. Spring概述1.1 什么是spring?1.2 Spring的俩大核心概念1.3 Spring框架的设计目标&#xff0c;设计理念&#xff0c;和核心是什么1.4 Spring的优缺点是什么&#xff1f;1.5 Spring有哪些应用场景1.6 Spring由哪些模块组成&#xff1f;1.7 Spring 框架中都用到了哪些设计…

uint8_t

什么是*_t https://blog.csdn.net/qq_19784349/article/details/82927169 以下内容引用自上边链接&#xff1a; *_t是typedef定义的表示标志&#xff0c;是结构的一种标注。即我们所看到的 uint8_t、uint16_t、uint32_t都不是新的数据类型&#xff0c;而是通过typedef给类型起得…

C++ uint8_t

问题&#xff1a;uint8_t是什么数据类型&#xff1f; 解决&#xff1a;C的主要数据类型&#xff0c;主要分为三类&#xff1a;布尔型&#xff0c;整型&#xff0c;浮点型。 按照posix标准&#xff0c;一般整型对应的*_t类型为&#xff1a; 1字节 uint8_t 2字节 uint16…

【C语言】uint8_t、uint16_t、uint32_t、uint64_t是什么?

文章目录 一、uint8_t 是什么&#xff1f;二、如何定义&#xff1f;三、为什么&#xff1f;四、基本数据类型有哪些&#xff1f;总结 一、uint8_t 是什么&#xff1f; uint8_t 是一个数据类型&#xff0c;也是别名&#xff0c;它是无符号8位整数类型的缩写。 uint 表示无符号…

Hadoop安装教程(Hadoop3.3.1版本),centos7系统,避免踩坑

参考林子雨教程Hadoop安装教程_伪分布式配置_CentOS6.4/Hadoop2.6.0_厦大数据库实验室博客 但是版本过低&#xff0c;还是centos6.4的和Hadoop2.x的 Hadoop安装教程 Centos7 JDK1.8 Hadoop3.3.1(高版本的Hadoop使用JDK1.7不行) 创建hadoop用户 [rootlocalhost luoyang]#…

最详细的Hadoop安装教程

最详细的Hadoop安装教程 前言 Hadoop 在大数据技术体系中的地位至关重要&#xff0c;Hadoop 是大数据技术的基础&#xff0c;对Hadoop基础知识的掌握的扎实程度&#xff0c;会决定在大数据技术道路上走多远。 这是一篇入门文章&#xff0c;Hadoop 的学习方法很多&#xff0c…

Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04

给力星 追逐内心的平和 首页笔记搜藏代码音乐关于 Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04 2014-08-09 (updated: 2016-03-25) 96109 195 当开始着手实践 Hadoop 时&#xff0c;安装 Hadoop 往往会成为新手的一道门槛。尽管安装其实很简单&#xff0c;…

大数据开发之windows安装hadoop教程

第一步 安装JDK 第二步 安装Hadoop 下载hadoop地址&#xff1a;http://archive.apache.org/dist/hadoop/common/hadoop-3.2.2/ 2. 下载hadoop-winutils https://github.com/cdarlint/winutils 将红色方框里面的文件复制到hadoop-3.2.2\bin目录中&#xff0c;hadoop主要基于…

安装Apache Hadoop2.7.1教程

教程环境 hadoop2.7.1 Ubutun16.06 JDK1.8 详细下载教程本教程暂不提供添加用户 创建Hadoop用户&#xff08;必不可少的&#xff0c;否则后面会因为权限问题导致无法搭建集群&#xff09; 添加Hadoop用户 sudo useradd -m hadoop -s /bin/bash设置新用户密码 sudo passwd …

Hadoop 安装教程

原创&#xff1a;http://www.powerxing.com/install-hadoop/ Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04 2014-08-09 (updated: 2017-03-02) 261103 346 当开始着手实践 Hadoop 时&#xff0c;安装 Hadoop 往往会成为新手的一道门槛。尽管安装其实很简单&#…

Hadoop安装教程 Mac版

Hadoop安装教程 Mac版 一、JDK环境安装 1. 下载JDK1.8 Oracle官网下载JDK1.8版本 按照系统提示安装 2. 配置JDK环境变量 在terminal中输入 vi ~/.bash_profile &#xff0c;按 i 进入编辑模式&#xff1a; JAVA_HOME/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/C…

CentOS 6虚拟机Hadoop安装教程

前言 本人初学hadoop&#xff0c;在安装配置环境时发现网上大部分博客的教程都不太完善&#xff0c;所以我结合了这些博客内容和老师的讲解写了下面这一份教程&#xff0c;这些操作都是本人经过尝试确认过没有问题的操作&#xff08;如果有问题的话希望大家能够指出 &#xff…