`

spring面试题 对DI , AOP概念的理解

阅读更多
今天有一哥们去面试 ,哥们说自己会ssh
面试官就问了几个spring的概念性的问题 ,哥们平时只专注于写代码,回来后一脸的无奈

本人总结了一些ssh常见的面试题 例举如下
强调在回答的时候不要光回答概念,要思维扩散性的讲些相关的东西

spring 的优点?
1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦
2.可以使用容易提供的众多服务,如事务管理,消息服务等
3.容器提供单例模式支持
4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能
5.容器提供了众多的辅助类,能加快应用的开发
6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等
7.spring属于低侵入式设计,代码的污染极低
8.独立于各种应用服务器
9.spring的DI机制降低了业务对象替换的复杂性
10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部

什么是DI机制?
依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色
需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中
创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者
因此也称为依赖注入。
spring以动态灵活的方式来管理对象 , 注入的两种方式,设置注入和构造注入。
设置注入的优点:直观,自然
构造注入的优点:可以在构造器中决定依赖关系的顺序。

什么是AOP?
面向切面编程(AOP)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面
1.面向切面编程提供声明式事务管理
2.spring支持用户自定义的切面

面向切面编程(aop)是对面向对象编程(oop)的补充,
面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。
AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽象,
是对应用执行过程中的步骤进行抽象,,从而获得步骤之间的逻辑划分。

aop框架具有的两个特征:
1.各个步骤之间的良好隔离性
2.源代码无关性
分享到:
评论
32 楼 peterwei 2011-01-07  
上来就给他扯几个设计模式,然后说你自已怎么实现spring的aop和ioc,这样估计他就不会再问你什么了。
31 楼 tiaccp 2011-01-07  
javajdbc 写道
我想这些东东 也只有在面试的时候 提到。。。。

都快忘干净了

   同感...
30 楼 kingwolf543 2010-11-29  
楼主你这是背答案嘛?有空看看原代码就不会被鄙视了
29 楼 aronlulu 2010-07-28  
finallygo 写道
说到spring,我有点小小的疑问,
我先说下我对spring的认识啊,spring中最主要的两个思想是ioc,aop
ioc就体现在工厂模式的应用,也就是说我们采用的都是面向接口的方式的编程,以后如果实现类发生变化了,可以通过修改配置文件而不用修改代码来实现系统的灵活性,但是实际上好像这种需求并不多啊,我们项目中都是一个接口,一个实现类,也就是说配置文件我们添加一个Dao的时候才去改配置文件,之后就再也不去动了,反而接口是经常变动的,因为需求是一直在增加的,所以给我的感觉就是接口成为了一个累赘,我改一个接口就要改一堆的东西(因为我们分了好几层,而一个方法的添加就从dao一直污染到顶层了),我觉得还不如直接创建一个实现类来的方便.
还有一个就是aop,我觉得主要就是用来做事务和日志的,但是这些用动态代理就可以实现了,我觉得spring太复杂了,没有必要用的
不知道我这两个思想有什么问题,麻烦你讲解一下.

个人觉得spring其实就一个ioc思想,aop=ioc+动态代理,spring aop提到如此高度正是ioc的辅佐,用spring的aop完全是为了用其ioc,要不然就像你说的自己封装个动态代理完全可以实现了。
每次写个业务组件一个接口一个实现类,觉得有点为了ioc而ioc了,没那个必要了
28 楼 笑我痴狂 2010-07-27  
好多人都是这样  如果准备换工作的话 

就要好好的准备点
27 楼 253405050 2010-07-27  
javajdbc 写道
我想这些东东 也只有在面试的时候 提到。。。。

都快忘干净了



同感啊,前几天面试几家公司,问到SSH的一些概念问题,都答的不是很好。
26 楼 笑我痴狂 2010-07-26  
spring 除了做事务管理和日志外 , 其他的却是用的很少

我个人觉得spring搞的太复杂了

25 楼 mercyblitz 2010-07-25  
finallygo 写道
说到spring,我有点小小的疑问,
我先说下我对spring的认识啊,spring中最主要的两个思想是ioc,aop
ioc就体现在工厂模式的应用,也就是说我们采用的都是面向接口的方式的编程,以后如果实现类发生变化了,可以通过修改配置文件而不用修改代码来实现系统的灵活性,但是实际上好像这种需求并不多啊,我们项目中都是一个接口,一个实现类,也就是说配置文件我们添加一个Dao的时候才去改配置文件,之后就再也不去动了,反而接口是经常变动的,因为需求是一直在增加的,所以给我的感觉就是接口成为了一个累赘,我改一个接口就要改一堆的东西(因为我们分了好几层,而一个方法的添加就从dao一直污染到顶层了),我觉得还不如直接创建一个实现类来的方便.
还有一个就是aop,我觉得主要就是用来做事务和日志的,但是这些用动态代理就可以实现了,我觉得spring太复杂了,没有必要用的
不知道我这两个思想有什么问题,麻烦你讲解一下.



最好不要修改接口,可以添加新的方法,淘汰前面的方法。类似于你这样的需求,过多的接口是没有必要的。可以设计动态参数,不过设计抽象不容易。

至于AOP,Spring AOP也是建立在他人的技术上的。利用动态代理是实现的,不过HardCode比较多。
24 楼 finallygo 2010-07-25  
说到spring,我有点小小的疑问,
我先说下我对spring的认识啊,spring中最主要的两个思想是ioc,aop
ioc就体现在工厂模式的应用,也就是说我们采用的都是面向接口的方式的编程,以后如果实现类发生变化了,可以通过修改配置文件而不用修改代码来实现系统的灵活性,但是实际上好像这种需求并不多啊,我们项目中都是一个接口,一个实现类,也就是说配置文件我们添加一个Dao的时候才去改配置文件,之后就再也不去动了,反而接口是经常变动的,因为需求是一直在增加的,所以给我的感觉就是接口成为了一个累赘,我改一个接口就要改一堆的东西(因为我们分了好几层,而一个方法的添加就从dao一直污染到顶层了),我觉得还不如直接创建一个实现类来的方便.
还有一个就是aop,我觉得主要就是用来做事务和日志的,但是这些用动态代理就可以实现了,我觉得spring太复杂了,没有必要用的
不知道我这两个思想有什么问题,麻烦你讲解一下.
23 楼 elvishehai 2010-07-25  
spring 难道没有弱点吗?
22 楼 godymoon 2010-07-25  
记得我去面试的时候,人家问我:你会spring ?那依赖注入这样的小儿科咱就不问了,直接来AOP吧!
21 楼 southgate 2010-07-24  

你的观点我有一部分认同,这种认同来源于市面上框架的滥用所造成的学习成本大于开发所带来的便利成本,比如有的人因为觉得ibatis有的优点Hibernate没有,于是去学ibatis,结果的确ibatis为项目带来了好处,但是所耗费的学习成本却远大大于项目带来的好处...对知识充满追求是好的,但是过度学习,就会影响工作产出和学习的平衡

不认同的部分,不提spring的一大堆天花乱坠的概念,关心的是不使用spring的时候,用struts和hibernate如何去进行事务的处理,放弃声明式使用编程式?这样代码将会多很多



关于事务的处理 我的方法是写个带事务的struts action,抓住exception后整个con回退
这种方式很老式,对于众牛人参与的上亿的项目可能不适用 但是对我做得这些中等项目即方便 也清晰。




20 楼 zhengbiao5 2010-07-24  
搬走收藏~我刚毕业正好用。
19 楼 sefcertyu 2010-07-23  
southgate 写道
lishuaibt 写道
southgate 写道
ssh 中spring可有可无,实际用途绝对比他带来的便利少的多。
真谛就是多了一堆无用的xml、jar和接口。
ioc==new  aop就一个log

其他的struts 和 hb 或许可以用其他的替换,但它们的功能不可缺少。




这个评价够NB啊  你的log真的用AOP吗?不懂就不懂,不要装懂!



我指的是业务数据的增删改查的历史记录,我习惯叫他log,抱歉造成误解。
其实struts和hibernate都有这种拦截器。

另外别动不动就是境界。
在实际开发过程中 struts和hibernate给我带来了很大的便利
因为我是从servlet+jdbc开始的。
而spring,带给我的只有麻烦和厌烦。


--
你的观点我有一部分认同,这种认同来源于市面上框架的滥用所造成的学习成本大于开发所带来的便利成本,比如有的人因为觉得ibatis有的优点Hibernate没有,于是去学ibatis,结果的确ibatis为项目带来了好处,但是所耗费的学习成本却远大大于项目带来的好处...对知识充满追求是好的,但是过度学习,就会影响工作产出和学习的平衡

不认同的部分,不提spring的一大堆天花乱坠的概念,关心的是不使用spring的时候,用struts和hibernate如何去进行事务的处理,放弃声明式使用编程式?这样代码将会多很多
18 楼 wangdgsc 2010-07-23  
Log也可以使用aop的方式,不过你不能详细的记录到操作的是哪一条记录,操作前记录是什么样的,操作后记录是什么样的,你能记录的只是用户的这个操作是成功 或者失败
17 楼 mercyblitz 2010-07-23  
lishuaibt 写道
southgate 写道
ssh 中spring可有可无,实际用途绝对比他带来的便利少的多。
真谛就是多了一堆无用的xml、jar和接口。
ioc==new  aop就一个log

其他的struts 和 hb 或许可以用其他的替换,但它们的功能不可缺少。




这个评价够NB啊  你的log真的用AOP吗?不懂就不懂,不要装懂!


Log不能用AOP的方式?
16 楼 southgate 2010-07-23  
lishuaibt 写道
southgate 写道
ssh 中spring可有可无,实际用途绝对比他带来的便利少的多。
真谛就是多了一堆无用的xml、jar和接口。
ioc==new  aop就一个log

其他的struts 和 hb 或许可以用其他的替换,但它们的功能不可缺少。




这个评价够NB啊  你的log真的用AOP吗?不懂就不懂,不要装懂!



我指的是业务数据的增删改查的历史记录,我习惯叫他log,抱歉造成误解。
其实struts和hibernate都有这种拦截器。

另外别动不动就是境界。
在实际开发过程中 struts和hibernate给我带来了很大的便利
因为我是从servlet+jdbc开始的。
而spring,带给我的只有麻烦和厌烦。

15 楼 lishuaibt 2010-07-23  
southgate 写道
ssh 中spring可有可无,实际用途绝对比他带来的便利少的多。
真谛就是多了一堆无用的xml、jar和接口。
ioc==new  aop就一个log

其他的struts 和 hb 或许可以用其他的替换,但它们的功能不可缺少。




这个评价够NB啊  你的log真的用AOP吗?不懂就不懂,不要装懂!
14 楼 aronlulu 2010-07-23  
spring好,但是为了spring而spring就变成一大堆缺点了
13 楼 jeleo 2010-07-23  
当编程到一定境界就才能理解这些概念的重要性了。

相关推荐

    77道Spring面试题以及参考答案(2024年最新版)

    这篇文章总结了77道Spring面试题及答案,涵盖了Spring的多个核心主题,包括Spring概述、Spring控制反转(IoC)、Spring Bean、Spring注解、Spring数据访问和Spring面向切面编程(AOP)等。文章对每个主题下的重点问题都给...

    Spring面试题 75道.pdf

    spring面试题 Spring是一个轻量级Java开发框架,最早有Rod Johnson创建,目的是为了解决企业级应用开发 的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack(一站式)轻量级 开源框架,为...

    25个经典的Spring面试问答

    25个经典的Spring面试问答,Spring面试常见的问题与回答。 在准备Spring框架的面试时,应掌握的核心主题和概念包括: Spring Framework简介:了解Spring框架的核心理念,包括依赖注入(DI)和面向切面编程(AOP)。...

    spring cloud 面试题专项

    1、什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。   Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序...

    Spring面试题

    面向切面编程(AOP)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面 1.面向切面编程提供声明式事务管理 2.spring支持用户自定义的切面 面向切面编程(aop)是对面向对象编程(oop)的...

    涵盖了90%以上的面试题

    Spring的IOC,DI和AOP 谈谈你对webservice和dubbo的理解 谈谈你的SOA的理解。 谈谈你对freemarker的理解 谈谈你对springMVC的理解 谈谈你对mybatis的理解 hibernate和mybatis的区别 同步接口和异步接口的区别 为什么...

    2019年最新Java面试题及答案整理.pdf

    javaspring面试题链接以及java基础的一些资料Spring的三大核心思想:IOC(控制反转),DI(依赖注入),AOP(面向切面编程)。 (1)IOC(控制反转)  实现将组件间的关系从程序内部提到外部容器(spring的xml)...

    SSM框架面试题.pdf

    1. Spring框架中的核心概念是什么? 2. 什么是IOC(控制反转)?Spring如何实现IOC? 3. 什么是DI(依赖注入)?与IOC有什么关系? 4. Spring中Bean的作用域有哪些? 5. 如何在Spring中配置Bean? 6. 解释Spring的...

    Java框架面试题.docx

    Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。Spring框架本身亦是按照设计模式精心打造,这...

    java面试题

    spring的IOC和DI? 答:控制反转和依赖注入是spring的两大基础作用。主要是将所有组件在spring提供的外部容器中加载。提高安全性,减低耦合性,使各个框架或者类之间的依赖性降低。 什么是声明式的事务管理?为什么要...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    180多页面试题,前前后后不间断的更新了两年,准备换工作时,总是拿来看看,有比较好的面试题,也不间断的更新,面试题目录如下: 【基础】面向对象的特征有哪些方面 13 抽象 13 继承 13 封装 13 多态性 13 【基础】...

    spring5-samples:《Spring5核心原理与30个类手写实战》随书代码示例工程

    《Spring5核心原理与30个类手写实战》4个月销量破万,连续占据畅销榜京东购买链接:当当购买链接:倾注十年Spring研究精华与见解★本书几乎涵盖在Spring应用中可能遇到的所有问题,核心原理(IoC、DI、AOP、MVC)、...

    千方百计笔试题大全

    14、编程题: 用最有效率的方法算出2 乘以8 等於几? 9 15、有没有length()这个方法? String 有没有length()这个方法? 9 16、在JAVA 中,如何跳出当前的多重嵌套循环? 9 17、构造器Constructor 是否可被override? 9 ...

    java面试宝典

    java面试试题 全面 准确 带答案 coreJava部分 8 1、面向对象的特征有哪些方面? 8 2、作用域public,private,protected,以及不写时的区别? 8 3、String 是最基本的数据类型吗? 8 4、float 型float f=3.4是否正确? 8 ...

    asp.net知识库

    我对J2EE和.NET的一点理解 难分难舍的DSO(一) InternalsVisibleToAttribute,友元程序集访问属性 Essential .NET 读书笔记 [第一部分] NET FrameWork的Collections支持 .NET的反射在软件设计上的应用 关于跨程序集...

Global site tag (gtag.js) - Google Analytics