spring 经典的高频面试题

1.使用spring框架能给我们带来的好处

1.1.简化开发

1.简化程序员的开发,简化业务开发

1.2.DI 依赖关系,一目了然

能够从配置文件,可以看出对象与对象的依赖关系,一目了然

1.3.IOC

1.在有限的内存,有限的资源情况下,能够管理好Bean;
2.分阶段,分层次帮忙管理

1.4.万能胶

1.能够兼容成熟的框架:
  Hibernate、MyBatis、Quartz[定时器]、Timer[JDK的]、Shiro、Spring Data,redis,MongoDB等等

1.5.模块化设计

1.即插即用,按需分配,需要啥用啥

在这里插入图片描述

1.6.自带测试组件:JUnit,Spring Test

1.7.Spring Web MVC

1.之前的Struts等有过度设计的嫌疑;
2.Spring MVC 完整分离了Servlet和普通Bean

如:

	@GetMapping("/preview.json")
	@ResponseBody
	public Flux<Member> preview(HttpServletRequest request, HttpServletResponse response){

		return null;
	}

没有必要一定是HttpServletRequest 和 HttpServletResponse

如下面:

	@GetMapping(value="/getByName.json")
	@ResponseBody
	public Mono<Member> getByName(@RequestParam String name){
		Member member = new Member();
		member.setName(name);
		return Mono.justOrEmpty(member);
	}

1.8.声明式事务

1.之前事务都是人为管理,自己开启,自己关闭;
2.spring将非功能性代码[非业务性代码]和功能性代码[业务性代码]分离,提出事务管理提前声明;
  事务管理提前声明:通过不同的切面实现不同的事务模型,达到代码运行以前事先配置好的效果,
                 而不是运行的时候,再去创建,降低了维护成本.

2.BeanFactory和ApplicationContext区别

2.1.ApplicationContext是BeanFactory子接口

2.2.ApplicationContext提供IOC容器中的Bean监控

1.这里的监控主要是指Bean的生命周期:Bean创建 销毁等等;

下面的了解即可
PostProcessor机制
Aware
举例

   ApplicationEvent
   ContextRefreshedEvent
   ContextStartedEvent 容器开始启动的时候触犯
   ContextStoppedEvent 容器终止的时候触发
   ContextClosedEvent 容器被关闭的时候触发 |所有bean被销毁的时候触发
   RequestHandleredEvent web容器请求结束的时候触发

2.2.ApplicationContext支持国际化i18n

2.3.ApplicationContext拓展了统一资源文件读取方式URL

1.这里的Url 可以是一个本地URL,也可以是一个网络URL
2.三种形式:
	ClassPathXmlApplicationContext:处理本地classpath下面的所有的配置文件的IOS容器
   	FileSystemXmlApplicationContext:处理文件系统在其他磁盘下的Url
   	XmlWebApplicationContext:加载网络文件的配置信息
3.另外AnnotationConfigApplicationContext:加载注解

3.Spring Bean的生命周期

1、初始化的时候回调调用:InitializingBean和DisposableBean用来回调
2、Aware接口
3init() destory()
4@PostContruct@PreDestory注解方式

4.Spring Bean各作用域的区别

1.总共5个范围:对象什么时候创建,什么时候销毁

4.1.singleton

1.我从容器启动就从石头缝里蹦出来,直到Spring的世界末日才灭亡

4.2.prototype

1.什么时候用,什么出生,用完就死了

4.3.request

1.request出生的时候就出生,request销毁的时候就销毁(request)
2.这个属于web层
3.用户发起请求的时候就有了,用户拿到结果的时候就销毁了
4.对于单一的请求,你可以认为是单例,但是对于spring请求中,每个又不一样,可以认为是多例;

4.4.session

1.session出生的时候就出生,session销毁的时候就销毁(session)

4.5.global-session

1.可以理解为上下文Context;一个全局的web容器

总结:5中作用域的长短[用时间长短去比较]

100岁:singleton
80岁:global-session Context
20岁:session
10岁:request
1岁: prototype

5.Spring的Bean是线程安全的吗?

1.Spring Bean 由IOC容器来创建;
2.创建的对象时用我们开发人员自己写的
3.定义 BeanDefinition BeanWarpper   instance   Class.newInstance(); new Object();
4.Map<String,BeanWarpper> 顶多就是做了一次代理,用一个新的类代替了原来的类
  跟我们写的代码有关系,跟Spring无关,
  自己写的是不是线程安全,那就是线程安全的,
  如果写的代码不是安全的,那就不是线程安全的;

6.Spring中用到了哪些设计模式?

7.Spring是如何处理循环依赖的?

class A 依赖,class B,Class B 依赖Class A;

用缓存机制来解决循环依赖的问题
BeanWrapper

A在加载的时候,发现B还没有实例化,会缓存在BeanWrapper中,等有了之后

8.Service层如何获得ApplicationContext

推荐接口ApplicationContextAware
实现即可
在这里插入图片描述

9.如何理解上下文

作用域问题
所处的运行环境;
Tomcat

猜你喜欢

转载自blog.csdn.net/u014636209/article/details/89508015