1使用Spring框架的优点是什么?

控制反转: Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。

面向切面的编程(AOP): Spring支持面向切面的编程。而且把应用业务逻辑和系统服务分开。

容器: Spring 包括并管理应用中对象的生命周期和配置。

事务管理: Spring 提供一个持续的事务管理接口。能够扩展到上至本地事务下至全局事务(JTA)。

异常处理: Spring 提供方便的API把详细技术相关的异常(比方由JDBC。Hibernate or JDO抛出的)转化为一致的unchecked 异常。

2.说说AOP和IOC/DI的概念以及在spring中是怎样应用的?

AOP,Aspect Oriented Program。面向(方面)切面的编程;

IOC,Invert Of Control。控制反转。

对象的实例由容器自己主动生成,

即用接口编程,在程序中不出现newkeyword,而是用接口来命名引用。

然后通过某种方式把接口的某个实现类的实例注入到引用里。从而实现接口与详细实现类的松耦合。

由容器控制程序之间的关系(通过XML配置)。而非传统实现中的由程序代码直接操控,

依赖注入,是IOC的一个方面,是个通常的概念,它有多种解释。这概念是说你不用创建对象。而仅仅须要描写叙述它怎样被创建。你不在代码里直接组装你的组件和服务,可是要在配置文件中描写叙述哪些组件须要哪些服务,之后一个容器(IOC容器)负责把他们组装起来。简单说一下,IOC就是事实上就是依赖注入,(在一个Class对象中引用还有一个Class对象时,我们通常都是直接通过new contructor)。

控制权由应用代码中转到了外部容器,控制权的转移。是所谓的反转。

AOP方式非常相似filter,就是在程序正常的业务流中间像切面一样插入非常多其它须要执行的代码,

比方登录时候。在进入登录页面前写入日志,非经常常使用的,尤其是跟数据库有关的,或者跟支付有关的程序肯定会在每一

步前面插入日志。

面向方面的编程,即 AOP,是一种编程技术,它同意程序猿对横切关注点或横切典型的职责分界线的行为(比如日志和事务管理)进行模块化。

AOP 的核心构造是方面,它将那些影响多个类的行为封装到可重用的模块中。

AOP Advice(AOP通知)分为:

前置通知 后置通知 异常通知 围绕通知

IOC/DI。IOC反射机制 ,AOP动态代理

3:Spring的事物有几种方式?Spring框架的事务管理有哪些优点? 你更倾向用那种事务管理类型?谈谈spring事物的隔离级别和传播行为?

编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,可是难维护。

声明式事务管理:这意味着你能够将业务代码和事务管理分离。你仅仅需用注解和XML配置来管理事务。

它为不同的事务API 如 JTA,JDBC,Hibernate,JPA 和JDO,提供一个不变的编程模式。

它为编程式事务管理提供了一套简单的API而不是一些复杂的事务API如

它支持声明式事务管理。

它和Spring各种数据訪问抽象层非常好得集成。

大多数Spring框架的用户选择声明式事务管理,由于它相应用代码的影响最小,

因此更符合一个无侵入的轻量级容器的思想。

声明式事务管理要优于编程式事务管理。

尽管比编程式事务管理(这样的方式同意你通过代码控制事务)少了一点灵活性。

事务的隔离级别:

数据库系统提供了4种事务隔离级别。在这4种隔离级别中,Serializable的隔离级别最高。Read Uncommitted的隔离级别最低;

· Read Uncommitted 读未提交数据。(会出现脏读)

· Read Committed 读已提交数据;

· Repeatable Read 可反复读;

事务的传播属性包括:

· Required业务方法须要在一个事务中执行。假设一个方法执行时已经处在一个事务中,那么增加到该事务,否则为自己创建一个新事务。 80%的方法用到该传播属性。

· Not-Supported· Requiresnew· Mandatoky· Supports· Never· Nested

Readonly提高查询效率。缓存,查询等做缓存没有意义

4: 解释Spring框架中bean的生命周期及Spring支持的几种作用域

答:

Spring容器 从XML 文件中读取bean的定义。并实例化bean。Spring依据bean的定义填充全部的属性。
假设bean实现了BeanNameAware 接口,Spring 传递bean 的ID 到 setBeanName方法。 假设Bean 实现了 BeanFactoryAware 接口, Spring传递beanfactory 给setBeanFactory 方法。 假设有不论什么与bean相关联的BeanPostProcessors,Spring会在postProcesserBeforeInitialization()方法内调用它们。
假设bean实现IntializingBean了。调用它的afterPropertySet方法。
假设bean声明了初始化方法,调用此初始化方法。 假设有BeanPostProcessors 和bean 关联。这些bean的postProcessAfterInitialization() 方法将被调用。
假设bean实现了 DisposableBean,它将调用destroy()方法。 Spring框架支持下面五种bean的作用域:
singleton : bean在每一个Spring ioc 容器中仅仅有一个实例。
prototype:一个bean的定义能够有多个实例。
request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。
session:在一个HTTP Session中。一个bean定义相应一个实例。 该作用域仅在基于web的Spring ApplicationContext情形下有效。
global-session:在一个全局的HTTP Session中。一个bean定义相应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

5:面向切面的原理

答:

面向对象的编程主要注重核心业务,而面向切面编程主要关注一些不是核心的业务,但又是必须的辅助功能。

就是把那些不是核心业务应该处理的代码提取出来,进行封装成模块化.来处理那些附加的功能代码(如日志。事务,安全验证)我们把这个模块的作用理解为一个切面,告诉我们它是一个功能模块.我们能够把它看成一个切面.说白了就是我们写一个类,在这个类中写一些处理在核心业务中起到相同效果的方法.

我们还要了解两个keyword:

 连接点(Joinpoint),简单的理解就是在切面模块中定义的方法.就是上面定义类中的方法.

 切入点(Pointcut).就是连接点的集合,就是一组方法的集合了. 下面几个就比較理解了。目标对象就是要处理的核心业务了.代理就更easy理解了,让一个代理去完毕这个任务.

 关于AOP编程可关注我另外一篇博客:

 Spring AOP 学习之动态动态代理

每日五题(Spring)的更多相关文章

  1. 【剑指Offer】简单部分每日五题 - Day 1

    今天开始更新leetcode上<剑指Offer>的题解,先从简单难度开始.预计按下列顺序更新: 简单难度:每日5题 中等难度:每日3题 困难难度:每日1题 17 - 打印从1到最大的n位数 ...

  2. 每日五题(jsp)

    1.forward 和 redirect 的差别 答: 1.从地址栏显示来说 forward是server请求资源,server直接訪问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容 ...

  3. Java实习生常规技术面试题每日十题Java基础(五)

    目录 1.启动一个线程是用run()还是start()? . 2.线程的基本状态以及状态之间的关系. 3.Set和List的区别,List和Map的区别? 4.同步方法.同步代码块区别? 5.描述Ja ...

  4. CISP/CISA 每日一题 五

    CISA 每日一题(答) 信息系统审计师要确认系统变更程序中的: 1.变更需求应有授权.优先排序及跟踪机制: 2.日常工作手册中,明确指出紧急变更程序: 3.变更控制程序应同时为用户及项目开发组认可: ...

  5. Java实习生常规技术面试题每日十题Java基础(七)

    目录 1. Java设计模式有哪些? 2.GC是什么?为什么要有GC? 3. Java中是如何支持正则表达式. 4.比较一下Java和JavaSciprt. 5.Math.round(11.5) 等于 ...

  6. 老男孩IT教育-每日一题汇总

    老男孩IT教育-每日一题汇总 第几天 第几周 日期 快速访问链接 第123天 第二十五周 2017年8月25日 出现Swap file….already exists以下错误如何解决? 第122天 2 ...

  7. 【JavaScript】Leetcode每日一题-移除元素

    [JavaScript]Leetcode每日一题-移除元素 [题目描述] 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度. 不要使用 ...

  8. 【python】Leetcode每日一题-删除有序数组中的重复项

    [python]Leetcode每日一题-删除有序数组中的重复项 [题目描述] 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现一次 ,返回删除后数组的新长度. 不要 ...

  9. [LeetCode每日一题]80. 删除有序数组中的重复项 II

    [LeetCode每日一题]80. 删除有序数组中的重复项 II 问题 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度. 不要使用额外 ...

随机推荐

  1. NYOJ 995 硬币找零

    硬币找零 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 在现实生活中,我们经常遇到硬币找零的问题,例如,在发工资时,财务人员就需要计算最少的找零硬币数,以便他们能从 ...

  2. Centos7 编译安装python3

    step1:preparation $ yum install yum-utils make wget gcc $yum-builddep python step2:download $ wget h ...

  3. 长沙理工大学第十二届ACM大赛-重现赛

    年轮广场 时间限制:1秒 空间限制:131072K 题目描述 在云塘校区,有一个很适合晒太阳的地方————年轮广场 年轮广场可以看成n个位置顺时针围成一个环. 这天,天气非常好,Mathon带着他的小 ...

  4. oracle表空间,分区表,以及索引的总结

    表空间: Oracle的UNDOTBS01.DBF文件太大的解决办法 1..禁止undo tablespace自动增长 alter   database   datafile   'full_path ...

  5. java紧耦合与松耦合关系

    请先看下这个关于松耦合的回答 举个简单的例子啦 有一百人分成10个团队做开发 你写了一个类A,供其他人调用,怎么办? 简单的方法就是把这个类打成jar包,然后给他们 他们就A a = new A(); ...

  6. 在LoadRunner向远程Linux/Unix执行命令行并收集性能数据

    前面介绍过在LoadRunner的Java协议实现“使用SSH连接Linux”,当然连接之后的故事由你主导. 今天要讲的,是一个非Java版本.是对“在LoadRunner中执行命令行程序之:pope ...

  7. 使用Unity做2.5D游戏教程(二)

    最近在研究Unity 3D,看了老外Marin Todorov写的教程很详细,就翻译过来以便自己参考,翻译不好的地方请多包涵. 这是使用Unity 游戏开发工具制作一个简单的2.5D 游戏系列教程的第 ...

  8. [BZOJ1594] [Usaco2008 Jan]猜数游戏(二分 + 并查集)

    传送门 题中重要信息,每堆草的数量都不一样. 可以思考一下,什么情况下才会出现矛盾. 1.如果两个区间的最小值一样,但是这两个区间没有交集,那么就出现矛盾. 2.如果两个区间的最小值一样,并且这两个区 ...

  9. Linux命令——top

    top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具.通过top命令所提供的互动式界面,用热键可以管理. 语法 top(选项) 选项 -b:以批处理模式 ...

  10. bzoj1411: [ZJOI2009]硬币游戏

    1411: [ZJOI2009]硬币游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 965  Solved: 420[Submit][Status ...