撩课-Java每天5道面试题第21天
136.请解释Spring Bean的生命周期?
首先说一下Servlet的生命周期:
实例化,
初始init,
接收请求service,
销毁destroy; Spring上下文中的Bean生命周期也类似,
如下:
.实例化一个Bean
也就是我们常说的new; .按照Spring上下文
对实例化的Bean进行配置
也就是IOC注入; .如果这个Bean已经实现了BeanNameAware接口,
会调用它实现的
setBeanName(String)方法,
此处传递的就是Spring配置文件中Bean的id值; .如果这个Bean已经实现了BeanFactoryAware接口,
会调用它实现的
setBeanFactory(setBeanFactory(BeanFactory)
传递的是Spring工厂自身
可以用这个方式来获取其它Bean,
只需在Spring配置文件中
配置一个普通的Bean就可以; .如果这个Bean已经实现了
ApplicationContextAware接口,
会调用setApplicationContext(ApplicationContext)方法,
传入Spring上下文
同样这个方式也可以实现步骤4的内容,
但比4更好,
因为ApplicationContext是BeanFactory的子接口,
有更多的实现方法 .如果这个Bean关联了
BeanPostProcessor接口,
将会调用
postProcessBeforeInitialization(Object obj, String s)方法,
BeanPostProcessor
经常被用作是Bean内容的更改,
并且由于这个是在Bean初始化结束时
调用那个的方法,
也可以被应用于内存或缓存技术; .如果Bean在Spring配置文件中
配置了init-method属性
会自动调用其配置的初始化方法。 .如果这个Bean关联了BeanPostProcessor接口,
将会调用
postProcessAfterInitialization(Object obj, String s)方法、; 注:以上工作完成以后就可以应用这个Bean了,
那这个Bean是一个Singleton的,
所以一般情况下
们调用同一个id的Bean会是
在内容地址相同的实例,
当然在Spring配置文件中
也可以配置非Singleton。 .当Bean不再需要时,
会经过清理阶段,
如果Bean实现了DisposableBean这个接口,
会调用那个其实现的destroy()方法; .最后,
如果这个Bean的Spring配置中
配置了destroy-method属性,
会自动调用其配置的销毁方法。 另外我们这里描述的是应用Spring
上下文Bean的生命周期,
如果应用Spring的工厂
也就是BeanFactory的话去掉第5步就Ok了。
137.介绍下Spring的主要模块?
Spring AOP:
Spring的关键组件之一是AOP框架。
AOP在Spring中使用:
提供声明性的企业服务,
特别是作为EJB声明式服务的替代品。
最重要的服务是声明式事务管理,
它建立在Spring的事务抽象之上。
允许用户实现自定义的切面,
补充他们使用AOP的OOP的使用。 Spring ORM:
ORM包与数据库访问有关。
它为流行的对象关系映射api提供集成层,
包括JDO、Hibernate和iBatis。 Spring Web:
web应用程序开发堆栈,
其中包括Spring MVC。 Spring DAO:
Spring的DAO(Data Access Object)
支持主要用于使用JDBC、
Hibernate或JDO等
技术标准化数据访问工作。 Spring Context:
此包构建在bean包之上,
以增加对消息源的支持和观察者的设计模式支持,
以及应用程序对象使用一致的
API获得资源的能力。 Spring Web MVC:
这是为web应用程序
提供MVC实现的模块。 Spring Core:
核心包是Spring框架中最重要的组件。 该组件提供依赖性注入特性。
BeanFactory提供了一种工厂模式,
它将诸如初始化、
创造和访问对象
与实际程序逻辑的访问分离开来。
138.Spring事务的种类和各自的区别?
spring支持
编程式事务管理
声明式事务管理
两种方式: .编程式事务管理使用TransactionTemplate
或者直接使用底层的PlatformTransactionManager。
对于编程式事务管理,
spring推荐使用TransactionTemplate。 .声明式事务管理建立在AOP之上的。
其本质是对方法前后进行拦截,
然后在目标方法开始之前创建或者加入一个事务,
在执行完目标方法之后
根据执行情况提交或者回滚事务。
声明式事务最大的优点
就是不需要通过编程的方式管理事务,
这样就不需要在业务逻辑代码中
掺杂事务管理的代码,
只需在配置文件中
做相关的事务规则声明
或通过基于@Transactional注解的方式
便可以将事务规则应用到业务逻辑中。 .显然声明式事务管理要优于编程式事务管理,
这正是spring倡导的非侵入式的开发方式。
声明式事务管理使业务代码不受污染,
一个普通的POJO对象,
只要加上注解就可以获得完全的事务支持。
和编程式事务相比,
声明式事务唯一不足地方是,
后者的最细粒度只能作用到方法级别,
无法做到像编程式事务
那样可以作用到代码块级别。
139.说说spring的事务传播行为?
spring事务的传播行为
说的是当一个方法调用另一个方法时,
事务该如何操作。
.PROPAGATION_REQUIRED:
如果当前没有事务,
就创建一个新事务,
如果当前存在事务,
就加入该事务,
该设置是最常用的设置。 .PROPAGATION_SUPPORTS:
支持当前事务,
如果当前存在事务,
就加入该事务,
如果当前不存在事务,
就以非事务执行。‘ .PROPAGATION_MANDATORY:
支持当前事务,
如果当前存在事务,
就加入该事务,
如果当前不存在事务,
就抛出异常。 .PROPAGATION_REQUIRES_NEW:
创建新事务,
无论当前存不存在事务,
都创建新事务。 .PROPAGATION_NOT_SUPPORTED:
以非事务方式执行操作,
如果当前存在事务,
就把当前事务挂起。 .PROPAGATION_NEVER:
以非事务方式执行,
如果当前存在事务,
则抛出异常。 .PROPAGATION_NESTED:
如果当前存在事务,
则在嵌套事务内执行。
如果当前没有事务,
则执行与PROPAGATION_REQUIRED类似的操作。
140.Spring事务的实现方式和实现原理
.划分处理单元——IOC:
由于spring解决的问题是
对单个数据库进行局部事务处理的,
具体的实现首相用spring中的IOC
划分了事务处理单元。
并且将对事务的各种配置
放到了ioc容器中
设置事务管理器,
设置事务的传播特性及隔离机制。 .AOP拦截需要进行事务处理的类: Spring事务处理模块
是通过AOP功能来实现声明式事务处理的,
具体操作
比如事务实行的配置和读取,
事务对象的抽象,
用TransactionProxyFactoryBean接口
来使用AOP功能,
生成proxy代理对象,
通过TransactionInterceptor完成
对代理方法的拦截,
将事务处理的功能
编织到拦截的方法中。 读取ioc容器事务配置属性,
转化为spring事务处理
需要的内部数据结构
TransactionAttributeSourceAdvisor
转化为TransactionAttribute表示的数据对象。 .对事物处理实现
事务的生成、提交、回滚、挂起: spring委托给具体的事务处理器实现。
实现了一个抽象和适配。
适配的具体事务处理器:
DataSource数据源支持、
hibernate数据源事务处理支持、
JDO数据源事务处理支持,
JPA、JTA数据源事务处理支持。
这些支持都是通过设计PlatformTransactionManager、
AbstractPlatforTransaction
一系列事务处理的支持。
为常用数据源支持提供了
一系列的TransactionManager。 结合:
PlatformTransactionManager实现了
TransactionInterception接口,
让其与TransactionProxyFactoryBean结合起来,
形成一个Spring声明式事务处理的设计体系。
撩课-Java每天5道面试题第21天的更多相关文章
- 撩课-Java每天5道面试题第13天
撩课Java+系统架构点击开始学习 96.JDBC操作数据库的步骤 ? .加载数据库驱动 .创建并获取数据库链接 .创建jdbc statement对象 .设置sql语句 .设置sql语句中的参数(使 ...
- 撩课-Java每天5道面试题第15天
撩课Java+系统架构点击开始学习 106.什么是Hibernate的并发机制?怎么去处理并发问题? a.Hibernate的Session对象是非线程安全的, 对于单个请求,单个会话, 单个的工作单 ...
- 撩课-Java每天5道面试题第10天
撩课Java+系统架构 视频 点击开始学习 81.Servlet的会话机制? HTTP 是一种无状态协议, 这意味着每次客户端检索网页时, 都要单独打开一个服务器连接, 因此服务器不会记录下 先前客户 ...
- 撩课-Java每天5道面试题第9天
撩课Java+系统架构 视频 点击开始学习 76.XML技术的作用? XML技术用于数据存储. 信息配置. 数据交换三方面. 可以将数据存储在XML中, 通过节点. 元素内容. 属性标示数据内容及关系 ...
- 撩课-Java每天5道面试题第8天
撩课Java+系统架构 视频 点击开始学习 71.jsp有哪些内置对象?作用分别是什么? Page, pageContext, request, response, session, applicat ...
- 撩课-Java每天10道面试题第7天
撩课Java+系统架构 视频 点击开始学习 61.什么是并发修改异常? 什么是并发修改异常: 当我们在遍历实现了collection接口 与iterator接口的集合时(List.Set.Map), ...
- 撩课-Java每天10道面试题第4天
撩课Java+系统架构 视频 点击开始学习 31.静态变量和实例变量的区别? 静态变量也叫类变量, 这种变量前加了static修饰符. 可以直接用类名调用, 也可以用对象调用, 而且所有对象的同一个类 ...
- 撩课-Java每天5道面试题第17天
116.说下Struts的设计模式 MVC模式: web应用程序启动时 就会加载并初始化ActionServler. 用户提交表单时, 一个配置好的ActionForm对象被创建, 并被填入表单相应的 ...
- 撩课-Java每天5道面试题第24天
151.springMVC和struts2的区别有哪些? .springmvc的入口是一个servlet即前端控制器(DispatchServlet), 而struts2入口是一个filter过虑器( ...
随机推荐
- 【OCP 12c】最新CUUG OCP-071考试题库(64题)
64.(22-7) choose the best answer: View the Exhibit and examine the structure of the ORDERS and ORDER ...
- centos7修改静态ip地址
今天逛园的时候突然发现这篇有关网络参数修改的文章写的很好,简单又使用,格式也很好的,所以就引用过来了. http://www.cnblogs.com/hongdada/p/6666932.html
- [CSS3] 二级下拉导航
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8& ...
- mybatis pagehelper多数据源配置的坑
我用spring boot配置了2个数据源的工程用来同步不同库的数据,发现如果配置成如下格式报错 #分页配置pagehelper: helper-dialect: mysql reasonable: ...
- 【Qt】Qt在Windows下的开发与调试环境配置
前文已经交待了从源码编译Qt自定义版本.现在可以开始配置一下开发与调试程序并写个Hello World了. 1. IDE 虽然Qt官方有VS插件使我们可以在VisualStudio中开发Qt应用,但我 ...
- leetcode-36-有效的数独
题目描述: 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以 ...
- ORACLE 动态执行SQL语句
本文转自 http://zhaisx.iteye.com/blog/856472 Oracle 动态SQL Oracle 动态SQL有两种写法:用 DBMS_SQL 或 execute immedia ...
- 【ASP.NET】DataTable导出EXCEL,弹窗提示下载保存(完整代码)
//新建ASPX protected void Page_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); Data ...
- [原创]SSH 隧道转发
目录 简介 本地SSH隧道 远程SSH隧道 FAQ 免密码登陆 自动重连 简介 建立ssh隧道常用于, 通过一台公网的主机或者是大家都可以访问的主机做跳转机,来访问内部或者外部不能直接访问的机器. 项 ...
- Object中的方法以及对象相等的判定
看图说话 Object有以下几个方法 getClass() final类型,主要是用来获得运行时的类型 hashCode() 返回该对象的哈希码值,方法是为了提高哈希表(例如 java.util.Ha ...