【Java面试课程】框架

本文深入探讨Spring框架的核心概念,包括MVC模式、Bean的生命周期与作用域、两大核心AOP和IOC,以及事务的传播特性和隔离级别。解析Spring如何管理JavaBean的生命周期,以及AOP和IOC在框架中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是框架

框架是一个框子,具有约束性。是一个架子,具有一定的支撑性

IT中的框架是指为解决一个开放性问题而设计的具有一定约束性支撑结构
在此结构上可以根据具体问题扩展安插更多的组成部分。从而更迅速的构建完整的解决方案

  • 框架本身不解决特定问题,可以在框架基础上扩展
  • 框架天生就是为了扩展
  • 可以为后续扩展的组件提供很多辅助性、支撑性的使用工具

2. 简要介绍MVC模式

MVC是Model view controller的缩写。

最经典的就是 jsp(view)+servlet(controller)+JavaBean(model)
在这里插入图片描述

  1. 当控制器收到请求后,
  2. 调用javabean完成业务
  3. 通过控制器跳转jsp页面的方式给用户反馈信息
  4. jsp给用户做响应

控制器都是核心

4 谈谈Spring Bean的生命周期和作用域

在企业应用软件开发中,Java 是毫无争议的主流语言,开放的Java EE 规范和强大的开源框架功不可没,其中 Spring 毫无疑问已经成为企业软件开发的事实标准之一。今天这一讲,我将补充 Spring 相关的典型面试问题,并谈谈其部分设计细节。

典型回答

Spring Bean的生命周期比较复杂,可以分为创建和销毁两个过程。

首先,创建Bean会经过一系列的步骤,主要包括

  • 实例化Bean对象
  • 设置Bean属性
  • 如果我们通过各种Aware接口声明了依赖关系,则会注入Bean对容器基础设施层面的依赖。具体包括BeanNameAware、BeanFactoryAware和ApplicationContentAware,分别会注入Bean ID,Bean Factory或者ApplicationContext
  • 调用BeanPostProcessorBean接口,则会调用afterPropertiesSet方法
  • 如果实现了InitializingBean接口,则会调用afterPropertiesSet方法
  • 调用Bean自身定义的init方法
  • 调用BeanPostProcessor的后置初始化方法postProcessAfterInitialization
  • 创建过程完毕

在这里插入图片描述


销毁bean的过程会依次调用DisposableBeandestroy方法和Bean自己定制的destroy方法。


SpringBean有5个作用域。最基础的有下面两种

  • Singleton,这是 Spring 的默认作用域,也就是每个IOC容器创建唯一的一个Bean实例
  • Prototype,针对每个 getBean 请求,容器都会单独创建一个Bean实例

从Bean的特定来看,Prototype适合有状态的bean。而Singleton适用于无状态的情况。另外Prototype作用域需要仔细思考,毕竟频繁创建和销毁Bean需要很大开销。

5.讲一下Spring中的两大核心AOP和IOC

Spring是什么?

Spring是J2EE应用程序框架,是轻量级的IoC和AOP的容器框架。主要针对javabean的生命周期进行管理的轻量级容器。

1. IOC(Inversion of Control)或DI(Dependency Injection)

IOC表示控制器反转
原来:我的Service需要调用DAO,Service就需要创建DAO
Spring:Spring发现你Service依赖于DAO,就给你注入
控制权从service转到了Spring
核心原理:配置文件+反射(工厂也可以)+容器(map)

2. AOP 面向切面编程

核心原理:使用动态代理的设计模型的方式在执行方法前后或出现异常后加入相关逻辑

主要用于:

  • 事务管理 (本来需要执行方法前开启事务,执行方法后关闭事务,出现异常后回滚事务)
  • 日志管理
  • 权限管理 (在执行方法前判断是否具有权限)等等

6.Spring的事务传播特性和隔离级别

存在多个事务是怎么处理的。

Spring事务的传播特性:

1、PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务。如果没有事务则开启
2、PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行
3、PROPAGATION_MANDATORY: 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常
4、PROPAGATION_REQUIRES_NEW: 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。
5、PROPAGATION_NOT_SUPPORTED: 总是非事务地执行,并挂起任何存在的事务。
6、PROPAGATION_NEVER: 总是非事务地执行,如果存在一个活动事务,则抛出异常
7、PROPAGATION_NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行


Spring事务的隔离级别:
1、ISOLATION_DEFAULT: 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.
另外四个与JDBC的隔离级别相对应
2、ISOLATION_READ_UNCOMMITTED: 这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。
这种隔离级别会产生脏读,不可重复读和幻像读。
3、ISOLATION_READ_COMMITTED: 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据
4、ISOLATION_REPEATABLE_READ: 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。
它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。
5、ISOLATION_SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻像读。

与数据库的隔离级别非常类似。

面试题包含了不同技术层面的面试问题,同时也能对一些没有面试开发经验的小白给予不可估量的包装, 让你的薪水绝对翻倍, 本人亲试有效.Java面试题84集、java面试专属及面试必问课程,所有的面试题有视屏讲解, 解答方案.以下是部分目录: java面试题01.面试的整体流程.mp4 │ Java面试题02.java的垮平台原理.mp4 │ Java面试题03.搭建一个java的开发环境.mp4 │ Java面试题04.java中int占几个字节.mp4 │ Java面试题05.java面向对象的特征.mp4 │ Java面试题06.装箱和拆箱.mp4 │ Java面试题07.==和equals的区别.mp4 │ Java面试题08.String.mp4 │ Java面试题09.讲一下java中的集合.mp4 │ Java面试题10.ArrayList LinkedList.mp4 │ Java面试题11.HashMap和HashTable的区别.mp4 │ Java面试题12.实现一个拷贝文件的类使用字节流还是字符串.mp4 │ Java面试题13.线程的实现方式 怎么启动线程怎么区分线程.mp4 │ Java面试题14.线程并发库和线程池的作用?.mp4 │ Java面试题15.设计模式和常用的设计模式.mp4 │ Java面试题16.http get post请求的区别.mp4 │ Java面试题17.说说你对Servlet的理解.mp4 │ Java面试题18.Servlet的生命周期.mp4 │ Java面试题19.forward和redirect的区别.mp4 │ Java面试题20.jsp和Servlet的相同点和不同点?.mp4 │ Java面试题21.内置对象和四大作用域和页面传值.mp4 │ Java面试题22.Session和Cookie的区别.mp4 │ Java面试题23.mvc模式和mvc各部分的实现.mp4 │ Java面试题24.数据库分类和常用数据库.mp4 │ Java面试题25.关系型数据库的三范式.mp4 │ Java面试题26.事务的四大特征.mp4 │ Java面试题27.mysql数据库最大连接数.mp4 │ Java面试题28.mysql和oracle的分页语句(着重说思路).mp4 │ Java面试题29.触发器的使用场景.mp4 │ Java面试题30.存储过程的优点.mp4 │ Java面试题31.jdbc调用存储过程.mp4 │ Java面试题32.简单说一下你对jdbc的理解.mp4 │ Java面试题33.写一个jdbc的访问oracle的列子.mp4 │ Java面试题34.jdbc中preparedStatement比Statement的好处.mp4 │ Java面试题35.数据库连接池的作用.mp4 │ Java面试题36.HTML.mp4 │ Java面试题37.简单介绍了一下Ajax.mp4 │ Java面试题38.js和JQuery的关系.mp4 │ Java面试题39.jQuery中的常用选择器.mp4 │ Java面试题40.jQuery中页面加载完毕事件.mp4 │ Java面试题41.jQuery中Ajax和原生js实现Ajax的关系.mp4 │ Java面试题42.简单说一下html5.mp4 │ Java面试题43.简单说一下css3.mp4 │ Java面试题44.bootstrap的是什么.mp4 │ Java面试题45.什么是框架.mp4 │ Java面试题46.简单介绍一下MVC模式.mp4 │ Java面试题47.简单说一下对mvc框架的理解.mp4 │ Java面试题48.struts2的执行流程或者struts2的原理.mp4 │ Java面试题49.Struts2的拦截器是什么?你都用它干什么?.mp4 │ Java面试题50.Spring MVC的执行流程.mp4 │ Java面试题51.SpringMVC和Struts2的不同.mp4 │ Java面试题52.简单介绍一下Spring或者Spring的两大核心.mp4 │ Java面试题53.AOP是什么?都用它做什么?.mp4 │ Java面试题54.Spring事务的传播特性和隔离级别.mp4 │ Java面试题55.ORM是什么?ORM框架是什么?.mp4 │ Java面试题56.ibatis和hibernate有什么不同.mp4 │ Java面试题57.hibernate对象状态及其转换.mp4 │ Java面试题58:hibernate的缓存.mp4 │ Java面试题59.webservice的使用场景.mp4 │ Java面试题60.Activiti的简单介绍.mp4 │ Java面试题61.linux的使用场景.mp4 │ Java面试题62.linux常用命令.mp4 │ Java面试题63:怎么操作linux服务器.mp4 │ Java面试题64:有没有使用过云主机.mp4 │ Java面试题65:数据库优化方面的事情.mp4 │ Java面试题66:如果查询和定位慢查询.mp4 │ Java面试题67:数据库优化之数据库表设计遵循范式.mp4 │ Java面试题68:选择合适的数据库引擎.mp4 │ Java面试题69:选择合适的索引.mp4 │ Java面试题70:使用索引的一些技巧.mp4 │ Java面试题71:数据库优化之分表.mp4 │ Java面试题72:数据库的读写分离.mp4 │ Java面试题73:数据库优化之缓存.mp4 │ Java面试题74:sql语句优化小技巧.mp4 │ Java面试题75:批量插入几百万条数据.mp4 │ Java面试题76:有没有使用过redis.mp4 │ Java面试题77:redis的使用场景.mp4 │ Java面试题78:redis存储对象的方式.mp4 │ Java面试题79:redis数据淘汰机制.mp4 │ Java面试题80:java访问redis级redis集群?.mp4 │ Java面试题81:微信公众号分类和微信开发原理.mp4 │ Java面试题82:怎么把微信和业务平台进行绑定.mp4 │ Java面试题83:项目的分类和项目参与者.mp4 │ Java面试题84:项目流程和业务注意事项.mp4 │ 面试必问-Mysql索引背后的故事 │ ├─java面试专属 │ ├─1.面试必考之HashMap源码分析与实现 │ │ 1.面试必考之HashMap源码分析与实现.mp4 │ │ │ ├─2.探索JVM底层奥秘ClassLoader源码分析与案例讲解 │ │ 2.探索JVM底层奥秘ClassLoader源码分析与案例讲解.wmv │ │ │ ├─3.锁、分布式锁、无锁实战全局性ID-悟空 │ │ 3.锁、分布式锁、无锁实战全局性ID-悟空.mp4 │ │ │ ├─4.SpringMvc深入理解源码分析 │ │ 4.SpringMvc深入理解源码分析-悟空.mp4 │ │ │ ├─5.Nosql Redis Jedis常用命令 │ │ 5.Nosql Redis Jedis常用命令-悟空.mp4 │ │ │ ├─6.互联网系统垂直架构之Session解决方案 │ │ 6.互联网系统垂直架构之Session解决方案.mp4 │ │ │ ├─7.分布式框架ZooKeeper之服务注册与订阅 │ │ 7.分布式框架Zookeeper之服务注册与订阅.mp4 │ │ │ ├─8.高性能网络编程必备技能之IO与NIO阻塞分析 │ │ 8.高性能网络编程必备技能之IO与NIO阻塞分析.mp4 │ │ │ ├─9.JAVA并发编程之多线程并发同步业务场景与解决方案 │ │ 9.JAVA并发编程之多线程并发同步业务场景与解决方案.wmv │ │ │ ├─10.微服务架构之Spring Cloud Eureka 场景分析与实战 │ │ 10.微服务架构之Spring Cloud Eureka 场景分析与实战.wmv │ │ │ ├─11.高性能必学之Mysql主从架构实践 │ │ 11.高性能必学之Mysql主从架构实践.mp4 │ │ │ ├─12.架构师不得不知道的Spring事物不能回滚的深层次原因 │ │ 12.架构师不得不知道的Spring事物不能回滚的深层次原因.mp4 │ │ │ ├─13.RPC底层通讯原理之Netty线程模型源码分析 │ │ 13.RPC底层通讯原理之Netty线程模型源码分析.wmv │ │ │ ├─14.分库分表之后分布式下如何保证ID全局唯一性 │ │ 14.分库分表之后分布式下如何保证ID全局唯一性.mp4 │ │ │ └─15.大型公司面试必答之数据结构与算法精讲 │ 大型公司面试必答之数据结构与算法(一)-达摩老师.mp4 │ 大型公司面试必答之数据结构与算法(二).mp4 │ ├─面试必问-JVM性能调优 │ JVM性能调优 2018-10-25.mp4 │ ├─面试必问-mybaits源码分析 │ │ 鲁班学院-上课笔记mybaits源码分析9-05.docx │ │ │ └─mybaits源码分析 │ mybaits源码分析.mp4 │ ├─面试必问-springcloud架构微服务项目 │ springcloud架构微服务项目.mp4 │ ├─面试必问-SpringMVC源码分析 │ SpringMVC源码分析.mp4 │ ├─面试必问-webservice原理分析 │ webservice原理分析.mp4 │ ├─面试必问-使用Springboot快速搭建SSM框架 │ 使用SpringBoot快速搭建SSM框架.mp4 │ ├─面试必问-双十一系统架构之Mysql索引技术剖析 │ 双十一系统架构之Mysql索引技术剖析.mp4 │ ├─面试必问-大牛带你手写dubbo框架 │ 大牛带你手写Dubbo框架.mp4 │ ├─面试必问-实战分布式之手写分布式事务框架 │ 实战分布式之手写分布式事务框架.mp4 │ ├─面试必问-带你精通springAOP—面试无忧虑 │ 带你精通AOP——面试无忧虑.mp4 │ ├─面试必问-微服务架构深入浅出讲解springcloud │ 微服务架构 --深入浅出讲解springcloud.mp4 │ ├─面试必问-教你手写MyBatis框架 │ 一小时教你手写MyBatis框架.mp4 │ ├─面试必问-架构杀手锏——java混乱的日志体系 │ java混亂日志体系源码揭秘.mp4 │ ├─面试必问-深入微服务之SpringBoot&Docker1 │ 深入微服务之SpringBoot&Docker.mp4 │ └─面试必问-聊聊哈希算法与HashMap
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值