springIOC面试题
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面试题相关推荐
- Java面试笔试题大汇总三(最全+详细答案)
Java面试笔试题大汇总一(最全+详细答案):https://www.jianshu.com/p/73b6b3d35676 Java面试笔试题大汇总二(最全+详细答案)https://www.jian ...
- java 面试题汇总
文章转自与:https://blog.csdn.net/weixin_38399962/article/details/80358168 JAVA基础 JAVA中的几种基本类型,各占用多少字节? ...
- 全网最经典26道Spring面试题总结,附面试题答案
一面(个人感觉回答得还不错) 1. 自我介绍 2. 说项目,项目问的非常深(本人提到之前做过的一篇关于FULL GC的问题定位和优化的项目以及一个多并发的项目) 2.1 对于自己产于过项目的系统定位是 ...
- 【Java面试题】docker拉取镜像
一面(个人感觉回答得还不错) 1. 自我介绍 2. 说项目,项目问的非常深(本人提到之前做过的一篇关于FULL GC的问题定位和优化的项目以及一个多并发的项目) 2.1 对于自己产于过项目的系统定位是 ...
- 【Java面试题】docker启动失败原因
对于面试大厂的朋友,一些建议 阿里 阿里面试官一般都是P7/P8岗,对标到普通互联网公司相当于就是技术专家那种类型!他们对于没有经验的毕业生面试问的比较浅一点,大多数问题问的集合.锁.JVM调优,线程 ...
- osgi框架和spring区别_最新100道大厂高频spring面试题附答案
简介 这里是由多位互联网大厂架构师面试整理的出现频率最高的spring相关面试题,并为大家整理了完整的答案,赶紧收藏起来吧! 100道spring高频面试题 Spring概览 1.Spring是什么? ...
- java判断时间区间 隔天_Java初中级程序员面试题宝典
Java基础部分 &与&&区别? &和&&都是逻辑运算符,都是判断两边同时真则为真,否则为假:但是&&当第一个条件不成之后,后面的条件都 ...
- java面试题_阿里大厂流出的数百道 Java 经典面试题
BAT 常问的 Java基础39道常见面试题 1.八种基本数据类型的大小,以及他们的封装类 2.引用数据类型 3.Switch能否用string做参数 4.equals与==的区别 5.自动装箱,常量 ...
- Spring面试题(70道,史上最全)
转载自 Spring面试题(70道,史上最全) 1.什么是spring? 2.使用Spring框架的好处是什么? 3.Spring由哪些模块组成? 4.核心容器(应用上下文)模块. 5.BeanFac ...
最新文章
- 【全真互联网下音视频技术创新应用】
- 关于 SAP 电商云 Spartacus UI checkout 流程的一些讨论
- Redis系列教程(六):Redis缓存和MySQL数据一致性方案详解
- 计算机应用基础教材6,全国2013年自考《计算机应用基础》教材大纲第六章
- stm32的语音识别_基于stm32循迹避障语音控制金属探测蓝牙小车设计(原理图+pcb+源码+参考文档)...
- rsync同步服务部署
- 上传文件到某文件夹时,提示...路径访问被拒绝
- MySQL数据类型和常用字段属性总结
- ibatis动态的传入表名、字段名
- VMware网络连接模式——桥接模式、NAT模式以及仅主机模式的介绍和区别
- 7z文件格式及其源码的分析(二)
- 用云服务器储存文件空间,用云服务器储存文件空间
- 天然产物分子机制研究(内含彩蛋)——药物靶点预测系统案例分析2
- 微信小程序跳转第三方页面
- PDF文档如何用关键字精确查找?
- 初识RFID的物理与逻辑安全机制
- scaffold-dbcontext 命令使用说明
- 采样定理 ADC采样
- Flex全屏后键盘输入问题
- DirectX学习笔记(十五):粒子系统实现
热门文章
- 有没有一句话,说起来很霸气,听起来很温馨 【转】
- 使用T-SQL语句操作数据表-查询数据
- 视觉SLAM十四讲(高翔版本),ch3章节部分笔记
- android log抓取方法,Android系统之Android抓取各种log的方法
- 阻塞和非阻塞、同步和异步的三篇笔记
- inprivate浏览是什么意思_inprivate浏览是什么?IE浏览器开启InPrivate浏览教程
- 2022 Cloud Native Computing代表厂商 | 灵雀云第三次入选Gartner中国ICT技术成熟度曲线报告
- javaIO流之转换流
- 地址:https://passport.jd.com/new/login.aspx 需求:模拟京东登陆请求参数
- php onload,onload 和 onreadystatechange