java面试快速扫盲(三):框架

spring是什么?

轻量级容器框架,用来装java bean对象,简化应用程序的开发
主要包括:IOC控制反转,AOP面向切面,声明式事务,粘合剂

谈谈你对IOC的理解

容器概念,控制反转,依赖注入
IOC容器:一个map,存放java bean对象,@repository,@Service,@Controller,@Component,在启动时扫描这些配置,放进容器,用的时候再依赖注入
控制反转:传统控制对象从主动new变为spring分配被动接受,则其为反转

如何一个实现IOC容器

1.写一个配置文件扫描包路径
2.定义一些注解,表示Controller,Service,Dao,依赖注入,配置文件
3.递归包获取所有.class文件,将其存在Set集合
4.遍历Set集合并反射获取类,找到对应注解的类,交给IOC容器,并用安全Map存储
5.遍历IOC容器,获取实例,若依赖其它类,则对其进行依赖注入

BeanFactory和ApplicationContext的区别

beanfactory懒加载,仅提供了实例化和拿对象的功能,。
ApplicationContext饿加载,有很多功能:
支持国际化
统一的访问资源方式
提供监听器中注册bean的事件
同时加载多个配置文件
载入多个上下文使得每一个上下文都专注于一个特定的层次,比如应用的web层

Spring bean的生命周期

粗略的说有四个:
!实例化
!属性赋值
!初始化
!销毁

所谓bean的声明周期,就是bean的创建和销毁过程的步骤

1.BeanDefinition对象创建
顾名思义,bean的定义,Spring利用beandefinition来创建bean,比如需要利用它的beanClass属性确定bean的类型,从而实例化对象

2.构造方法推断
一个bean有多个构造方法,需要Spring判断使用哪个,通过构造方法推断后确定一个,就可以用构造方法实例化得到一个对象了

3.实例化
构造方法反射得到一个实例化对象,Spring中通过BeanPostProcessor机制对实例化进行干预。

4.属性填充
实例化得到的对象是不完整的,尚未对某些属性填充,也就是平常说的依赖注入

5.初始化
一个对象的属性填充后,Spring提供了初始化机制,开发人员可以用初始化对bean自定义加工,比如利用InitializingBean接口对bean其它属性进行赋值,或对bean的某些属性校验

6.初始化后
bean创建的最后一步,如AOP就是在BeanPostProcessor机制实现的,初始化后得到的对象才是真正的bean对象,如果当前创建的Bean是单例,则把bean放入单例池

7.销毁
Spring容器关闭时,调用DisposableBean中destroy()方法

Spring bean 作用域

单例(singleton):(默认)每一个Spring IoC容器都拥有唯一的一个实例对象
原型(prototype): 一个Bean定义,任意多个对象
请求(request): 一个HTTP请求会产生一个Bean对象,也就是说,每一个HTTP请求都有自己的Bean实例。只在基于web的Spring ApplicationContext中可用
会话(session): 限定一个Bean的作用域为HTTPsession的生命周期。同样,只有基于web的Spring ApplicationContext才能使用
全局会话(global session): 限定一个Bean的作用域为全局HTTPSession的生命周期。通常用于门户网站场景,同样,只有基于web的Spring ApplicationContext可用

Spring 的单例Bean线程安全吗

不是

Spring有哪些设计模式和应用场景

简单工厂:比如beanFactory
单例模式:Spring创建实例默认都是单例
动态代理:AOP容器会为目标对象创建一个代理对象
策略模式:Spring访问Resource接口,该接口提供了强大的资源访问能力

Spring事务的实现方式

事务是基于数据库的,Spring提供的只是给数据库的事务进行扩展
事务分为编程式和声明式,编程式就是普通数据库中的begin end语句,声明式就如Spring的@Transactional注解
在某个方法加上@Transactional则开启事务,此方法中的所有sql都会在一个事务中进行,原理是:Spring基于这个类生成一个代理对象作为bean,当使用它的方法时,如果有此注解,则代理会把自动提交设为false,然后再执行业务逻辑,如无异常,代理就提交事务,有则回滚。默认是运行时异常和error回滚,可以在注解中设置属性rollbackFor=xxx配置

Spring事务的隔离级别

Spring的隔离级别就是数据库的隔离级别:
未提交读:
提交读,不可重复读: Oracle默认
可重复读: MySQL默认
可串行(xing)化:

Spring事务传播机制

Spring事务什么时候会失效

Spring bean的自动装配,有哪些方式

Spring,SpringMVC,SpringBoot的区别

SpringMVC的工作流程

SpringMVC的九大组件

SpringBoot的自动装配原理

SpringBoot的Starter如何理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值