流行词:Spring5 特性 面试题
参考代码:https://gitee.com/li-lixiang/lean-spring-2.0.git
在前面的blog中,已经实现Spring IOC、DI、MVC和AOP,并学习了Spring的数据访问。本次学习Spring5的新特性以及高频面试题。
Spring5新特性
1)升级JDK8,J2EE 7
2)反应是的编程
3)全面支持注解编程
4)支持函数式编程
5)全面支持REST风格配置
6)对HTTP2.0全面支持
7)Kotlin和Spring WebFlux
8)可以直接用Lambda表达式来注册Bean
9)Spring Web MVC全面罪行的Servlet API
10)JUnit 5 直接执行并发测试
11)丢弃Hibernate3/4,只支持Hibernate5,对Portlet、Veloctiy、XMLBeans、JDO、Guava终止支持
12)Spring核心容器做了一些更新@Nullable、Logback
面试题
1、使用Spring框架能给我们带来哪些好处?
简化开发
DI:依赖关系一目了然
IOC:管理好系统中的Beans
万能胶:兼容成熟的框架Hibernate、Mybatis、Quartz、Timer、Shiro、Data
模块化设计:即插即用,按需分配
自带测试组件:JUnit
Web MVC:过度设计嫌疑(Struts Action)、完美分离了Servlet和普通Bean
生命是事务:自然将非功能性代码和功能性代码分离,提出了事务管理提前声明
2、BeanFactory和ApplicationContext有什么区别?
ApplicationContext是BeanFactory的子接口
getBean();关键方法
1)IOC容器中的Bean的监控,生命周期
PostProcessor
Aware
ApplicationEvent
ContextRefreshEvent
ContextStartedEvent
ContextStoppedEvent
ContextClosedEvent
RequestHandleredEvent
InitAware
2)支持国际化i18n
3)拓展了统一资源文件读取方式URL
可以是本地URL,也可以是网络URL:ClassPathXmlApplicationContext
FileSystemXmlApplicationContext
XmlWebApplicationContext 加载网络文件
AnnotationConfigApplicationContext通过注解配置
3、请解释Spring Bean的生命周期
1)InitializingBean和DisposableBean用来回调
2)Aware接口
3)init()、destroy()
4)@PostConstruct和@PreDestroy注解方式
4、Spring Bean各作用域之间的区别?
总共5各范围:对象什么时候创建,什么时候销毁
Spring Bean 命各有长短
规定了有5中寿命
1)什么时候用,什么时候生,用完就死了(prototype),5岁
2)我从容器启动就从石头缝蹦出来,知道Spring的世界末日才灭亡(singleton),100岁
3)request出生的时候就出生,request销毁的时候就销毁(request),10岁
4)session出生的时候就出生,session销毁的时候就销毁(session),20岁
5)global-session Context,80岁
5、Spring中的Bean是线程安全的吗?
Spring Bean是由IOC容器来创建,创建的对象是谁写的?
自己写的
BeanDefinition
BeanWrapper instance Class.newInstance(); new Object();
Map<String,BeanWrapper> 顶多就是做了一次代理,用一个新的类代替了原来的类
Bean的线程跟我们写的代码有关系,跟Spring无关
6、请问Spring中用到了哪些设计模式?
7、Spring是怎样处理循环依赖的?
用缓存机制来解决循环依赖问题
BeanWrapper
8、在service层中如何获取到applicationContext?
实现ApplicationContextAware接口
架构师要打到什么水平就可以出去面试?
1、Java基础扎实:精通多线程编程,熟悉分布式,缓存,消息队列等机制,熟悉JVM,包括内存模型、类加载机制以及性能优化;
2、对各种开源的框架如Spring、Hibernate等有深入的了解,对框架本身有过开发或者重构者优先考虑;
3、具备良好的识别业务关键需求和设计领域模型的能力
4、软技能ok
5、有大型分布式项目经验