Spring框架面试(1)

1,spring如何解决循环依赖

用到三级缓存,具体过程如下:

(1)初始化bean之前,将这个beanname放入三级缓存

(2)将准备创建的bean放入sigletonscurrentlyCreation

(3)创建新实例后调用addsigletonFactory方法,将这个实例化但未属性赋值的bean放入二级缓存,从三级缓存中移除

(4)属性赋值和自动注入时,引发关联创建

(5)关联创建时,检查正在被创建的bean中是否有即将注入的bean,如果有检查二级缓存里面有没有创建好但没属性赋值的bean,若没有,检查三级缓存有没有正在创建中的bean,此时一般有,将此bean放入二级缓存,从三级缓存里移除

(6)之后bean被成功注入,最后执行addsigleton,将这个完全创建好的bean放入一级缓存,从二级,三级缓存中移除,并记录已经创建的单例bean

2,spring中bean的作用域有哪些?

sigleton:唯一bean实例,spring中的bean默认都是单例的

prototype:每次请求都会创建一个新的bean实例

request:每次http请求都会创建一个新的bean实例,该bean实例仅仅在该http request内有效

session:每次http请求都会创建一个新的bean实例,该bean实例仅仅在该http session内有效

3,什么是IOC?

控制反转是一种设计思想,原本用户在程序中手动创建对象的控制权,交给spring容器管理。IOC容器是spring实现IOC思想的载体,本质上是一个Map,Map的映射是beanName->对象

将对象之间相互依赖关系交给IOC容器管理,并由IOC容器负责注入,可以大大简化应用开发。IOC容器像工厂一样,当我们需要创建对象时,配置好配置文件/注解即可,完全不用考虑对象是如何创建出来的,只需在需要的地方引用即可。

4,什么是AOP

面向切面变成能将那些与业务无关,却为业务模块所共同调用的逻辑代码(事务处理,日志管理,权限控制)封装起来,减少系统冗余代码,降低模块间耦合度。

5,springAOP与AspectJ有什么区别?

(1)springAOP属于是运行时增强,AspectJ属于是编译时增强

(2)SpringAOP基于代理,AspectJ基于字节码操作

(3)SpringAOP较为简单,AspectJ更为强大

(4)切面太多时,选择AspectJ,它比SpringAOP快很多

6,@Component和@Bean注解的区别?

(1)@component作用于类,而@Bean用于方法

(2)@component是利用路径扫描来自动侦测到以及自动装配到spring容器中,@Bean注解通常是在有该注解的方法中定义产生bean

(3)@Bean注解比@Component注解自定义性更强(第三方类库只能用@bean来注册bean)

7,@AutoWired注解和@Resource注解的区别

(1)@AutoWired是spring定义的注解,@Resource是java定义注解

(2)依赖查找顺序不同:@AutoWired是先byType再byName查找,@Resource是先byname再bytype查找

(3)@AutoWired只支持一个required参数,@Resource支持多个参数

(4)@AutoWired支持属性注入。构造注入和setter注入,而@Resource只支持属性注入和setter注入

(5)IDEA中,如果注入Mapper对象时,@AutoWired会报错而@Resource不会

8,@Repository和@Mapper的区别?

(1)@Repository是spring的注解,用于声明一个bean,单独使用没用,必须用@MapperScannerConfigurer配置扫描地址这个接口才会被扫描

(2)@Mapper是Mybatis的注解,用于mybatis找到对应的mapper,不需要配置扫描地址,可以单独使用,如果有多个mapper文件的话可以在项目启动类下使用@MapperScan配置mapper包扫描

9,spring中涉及的设计模式有哪些?

(1)工厂模式:使用beanfactory和applicationContext创建对象

(2)代理模式:SpringAOP的实现

(3)单例模式:Spring中的bean都是单例的

(4)模板模式:jdbcTemplate各种以Template结尾的对数据库操作的类

(5)装饰器模式:需连接多个数据库,动态切换不同数据源

(6)观察者模式:spring中的事务驱动模型

(7)适配器模式:SpringAOP中的增强或通知,SpringMVC中的用适配器匹配Controller

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Nathaniel333

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

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

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

打赏作者

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

抵扣说明:

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

余额充值