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());  }  }

springIOC面试题相关推荐

  1. Java面试笔试题大汇总三(最全+详细答案)

    Java面试笔试题大汇总一(最全+详细答案):https://www.jianshu.com/p/73b6b3d35676 Java面试笔试题大汇总二(最全+详细答案)https://www.jian ...

  2. java 面试题汇总

    文章转自与:https://blog.csdn.net/weixin_38399962/article/details/80358168 JAVA基础 JAVA中的几种基本类型,各占用多少字节?   ...

  3. 全网最经典26道Spring面试题总结,附面试题答案

    一面(个人感觉回答得还不错) 1. 自我介绍 2. 说项目,项目问的非常深(本人提到之前做过的一篇关于FULL GC的问题定位和优化的项目以及一个多并发的项目) 2.1 对于自己产于过项目的系统定位是 ...

  4. 【Java面试题】docker拉取镜像

    一面(个人感觉回答得还不错) 1. 自我介绍 2. 说项目,项目问的非常深(本人提到之前做过的一篇关于FULL GC的问题定位和优化的项目以及一个多并发的项目) 2.1 对于自己产于过项目的系统定位是 ...

  5. 【Java面试题】docker启动失败原因

    对于面试大厂的朋友,一些建议 阿里 阿里面试官一般都是P7/P8岗,对标到普通互联网公司相当于就是技术专家那种类型!他们对于没有经验的毕业生面试问的比较浅一点,大多数问题问的集合.锁.JVM调优,线程 ...

  6. osgi框架和spring区别_最新100道大厂高频spring面试题附答案

    简介 这里是由多位互联网大厂架构师面试整理的出现频率最高的spring相关面试题,并为大家整理了完整的答案,赶紧收藏起来吧! 100道spring高频面试题 Spring概览 1.Spring是什么? ...

  7. java判断时间区间 隔天_Java初中级程序员面试题宝典

    Java基础部分 &与&&区别? &和&&都是逻辑运算符,都是判断两边同时真则为真,否则为假:但是&&当第一个条件不成之后,后面的条件都 ...

  8. java面试题_阿里大厂流出的数百道 Java 经典面试题

    BAT 常问的 Java基础39道常见面试题 1.八种基本数据类型的大小,以及他们的封装类 2.引用数据类型 3.Switch能否用string做参数 4.equals与==的区别 5.自动装箱,常量 ...

  9. Spring面试题(70道,史上最全)

    转载自 Spring面试题(70道,史上最全) 1.什么是spring? 2.使用Spring框架的好处是什么? 3.Spring由哪些模块组成? 4.核心容器(应用上下文)模块. 5.BeanFac ...

最新文章

  1. 【全真互联网下音视频技术创新应用】
  2. 关于 SAP 电商云 Spartacus UI checkout 流程的一些讨论
  3. Redis系列教程(六):Redis缓存和MySQL数据一致性方案详解
  4. 计算机应用基础教材6,全国2013年自考《计算机应用基础》教材大纲第六章
  5. stm32的语音识别_基于stm32循迹避障语音控制金属探测蓝牙小车设计(原理图+pcb+源码+参考文档)...
  6. rsync同步服务部署
  7. 上传文件到某文件夹时,提示...路径访问被拒绝
  8. MySQL数据类型和常用字段属性总结
  9. ibatis动态的传入表名、字段名
  10. VMware网络连接模式——桥接模式、NAT模式以及仅主机模式的介绍和区别
  11. 7z文件格式及其源码的分析(二)
  12. 用云服务器储存文件空间,用云服务器储存文件空间
  13. 天然产物分子机制研究(内含彩蛋)——药物靶点预测系统案例分析2
  14. 微信小程序跳转第三方页面
  15. PDF文档如何用关键字精确查找?
  16. 初识RFID的物理与逻辑安全机制
  17. scaffold-dbcontext 命令使用说明
  18. 采样定理 ADC采样
  19. Flex全屏后键盘输入问题
  20. DirectX学习笔记(十五):粒子系统实现

热门文章

  1. 有没有一句话,说起来很霸气,听起来很温馨 【转】
  2. 使用T-SQL语句操作数据表-查询数据
  3. 视觉SLAM十四讲(高翔版本),ch3章节部分笔记
  4. android log抓取方法,Android系统之Android抓取各种log的方法
  5. 阻塞和非阻塞、同步和异步的三篇笔记
  6. inprivate浏览是什么意思_inprivate浏览是什么?IE浏览器开启InPrivate浏览教程
  7. 2022 Cloud Native Computing代表厂商 | 灵雀云第三次入选Gartner中国ICT技术成熟度曲线报告
  8. javaIO流之转换流
  9. 地址:https://passport.jd.com/new/login.aspx 需求:模拟京东登陆请求参数
  10. php onload,onload 和 onreadystatechange