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天的更多相关文章

  1. 撩课-Java每天5道面试题第13天

    撩课Java+系统架构点击开始学习 96.JDBC操作数据库的步骤 ? .加载数据库驱动 .创建并获取数据库链接 .创建jdbc statement对象 .设置sql语句 .设置sql语句中的参数(使 ...

  2. 撩课-Java每天5道面试题第15天

    撩课Java+系统架构点击开始学习 106.什么是Hibernate的并发机制?怎么去处理并发问题? a.Hibernate的Session对象是非线程安全的, 对于单个请求,单个会话, 单个的工作单 ...

  3. 撩课-Java每天5道面试题第10天

    撩课Java+系统架构 视频 点击开始学习 81.Servlet的会话机制? HTTP 是一种无状态协议, 这意味着每次客户端检索网页时, 都要单独打开一个服务器连接, 因此服务器不会记录下 先前客户 ...

  4. 撩课-Java每天5道面试题第9天

    撩课Java+系统架构 视频 点击开始学习 76.XML技术的作用? XML技术用于数据存储. 信息配置. 数据交换三方面. 可以将数据存储在XML中, 通过节点. 元素内容. 属性标示数据内容及关系 ...

  5. 撩课-Java每天5道面试题第8天

    撩课Java+系统架构 视频 点击开始学习 71.jsp有哪些内置对象?作用分别是什么? Page, pageContext, request, response, session, applicat ...

  6. 撩课-Java每天10道面试题第7天

    撩课Java+系统架构 视频 点击开始学习 61.什么是并发修改异常? 什么是并发修改异常: 当我们在遍历实现了collection接口 与iterator接口的集合时(List.Set.Map), ...

  7. 撩课-Java每天10道面试题第4天

    撩课Java+系统架构 视频 点击开始学习 31.静态变量和实例变量的区别? 静态变量也叫类变量, 这种变量前加了static修饰符. 可以直接用类名调用, 也可以用对象调用, 而且所有对象的同一个类 ...

  8. 撩课-Java每天5道面试题第17天

    116.说下Struts的设计模式 MVC模式: web应用程序启动时 就会加载并初始化ActionServler. 用户提交表单时, 一个配置好的ActionForm对象被创建, 并被填入表单相应的 ...

  9. 撩课-Java每天5道面试题第24天

    151.springMVC和struts2的区别有哪些? .springmvc的入口是一个servlet即前端控制器(DispatchServlet), 而struts2入口是一个filter过虑器( ...

随机推荐

  1. [CISCO] 交换机间链路聚合端口聚合

    [CISCO] 交换机间链路聚合端口聚合 一.Introduction 端口通道( port channel ) 是一种聚合多个物理接口 ( that ) 创建一个逻辑接口.你可以捆扎( bundle ...

  2. CentOS7打开关闭防火墙与端口

    http://www.javahelp.com.cn/h-nd-747.html#_np=153_1707

  3. day 10 课后作业

    # -*- coding: utf-8 -*-# @Time : 2019/1/2 16:35# @Author : Endless-cloud# @Site : # @File : 课后作业.py# ...

  4. delphi 10.2 ----memo 的例子 实现基本记事本功能

    unit Unit2; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System ...

  5. Spring表单验证

    表单验证 给表单添加验证的步骤如下 1.在 pom.xml 里添加 hibernate-validator 依赖http://hibernate.org/validator/documentation ...

  6. Maven 问题笔记汇总

    Web项目通过Maven部署到Tomcat的错误. Maven环境下面多项目之间的引用 Maven 远程仓库下载慢的的解决方案 Intellij IDEA 像eclipse那样给maven添加依赖 I ...

  7. Carte作为Windows服务

    有一些用例将Carte作为Windows服务运行: 当使用命令窗口运行Carte实例时,任何人都会错误地关闭实例并且Carte将关闭. Carte.bat命令窗口与调用批处理文件的用户会话相关联,需要 ...

  8. whdxlib

    1 数据库系统实现 实 验 指 导 书 齐心 彭彬 计算机工程与软件实验中心 2016 年 3 月2目 录实验一.JDBC 应用程序设计(2 学时) ......................... ...

  9. MySQL之试图、触发器、事务、存储过程、函数

    阅读目录 一.视图 二.触发器 三.事务 四.存储过程 五.函数 六.流程控制 一.视图 视图是一个虚拟表(非真实存在),是跑到内存中的表,真实表是硬盘上的表,怎么就得到了虚拟表,就是你查询的结果,只 ...

  10. shell (三) 文件压缩

    查看压缩文件 #tar tvf tar.tar.gz -rw-r--r-- root/root 290 2019-03-22 14:38 README.md -rw-r--r-- root/root ...