论坛首页 Java企业应用论坛

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

浏览 31906 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (1) :: 隐藏帖 (1)
作者 正文
   发表时间:2011-02-16  
我对spring的了解是没这么深入
用到哪弄到哪。。。。
这个真是为了面试而学习吧
0 请登录后投票
   发表时间:2011-02-16   最后修改:2011-02-16
DI跟IOC不是同一个概念。
Object obj = new Object();

直接new一个你需要的对象,也是DI。
DI又分两种,一个叫拉,一个叫推。
Object obj = new Object();
Object obj = factory.make();

直接new跟工厂模式都是拉的DI,需要客户端自己去得到自身需要的东西。
而IOC是一种推的DI。
你可以把IOC想象成理想的社会主义社会,你需要什么,它就会给你什么。
当然,有个前提,你需要的东西这个社会里面要有而且你必需受这个社会管理。
在spring的表现形式就是:
社会主义社会==BeanFactory 而你跟你需要的东西都是受这个BeanFactory管理的Bean。
事实上,纯粹的IOC是没法做的。
0 请登录后投票
   发表时间:2011-02-18  
Loudyn 写道
DI跟IOC不是同一个概念。
Object obj = new Object();

直接new一个你需要的对象,也是DI。
DI又分两种,一个叫拉,一个叫推。
Object obj = new Object();
Object obj = factory.make();

直接new跟工厂模式都是拉的DI,需要客户端自己去得到自身需要的东西。
而IOC是一种推的DI。
你可以把IOC想象成理想的社会主义社会,你需要什么,它就会给你什么。
当然,有个前提,你需要的东西这个社会里面要有而且你必需受这个社会管理。
在spring的表现形式就是:
社会主义社会==BeanFactory 而你跟你需要的东西都是受这个BeanFactory管理的Bean。
事实上,纯粹的IOC是没法做的。



正解  
0 请登录后投票
   发表时间:2011-06-14  
笑我痴狂 写道
今天有一哥们去面试 ,哥们说自己会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.源代码无关性

0 请登录后投票
   发表时间:2011-06-14  
ssh忘得差不多了,

很久没用
0 请登录后投票
   发表时间:2011-06-16   最后修改:2011-06-16
我现在的项目里,就用了hibernate,手工控制事务。其实把事务抽象出来到service层,然后用一个基类控制事务提交,filter控制回滚,并没有增加多少的代码量,虽然说没有IoC,代码里有很多new之类的依赖,但是在一些比较特殊的地方这种方式还是很方便的,能灵活控制流程。连Struts也仅仅是用了标签库,Action都没有,就用的简单的Servlet。但是确实很灵活,基本上没有实现不了的功能。

spring的作用,对我来说,在项目里的发挥的作用远不如在求职时发挥的作用大……

我的观点就是,合理的使用才能发挥最大的作用,为了XXX而XXX有时候反而得不偿失。
0 请登录后投票
   发表时间:2011-06-16   最后修改:2011-06-16
是不是除了spring J2EE就没有其他的东西了?同志们都在讨论这个,为什么不换个问题讨论一下呢?比如:谁能好好讲讲JVM虚拟机(不要说想了解 就自己去看深入虚拟机之类的话),论坛里貌似没有几个人讲 它的,或者说讲得很好的,希望对虚拟机理解很透彻的人给讲一下!我不想为了框架而框架,当对java了解到一定程度自己就可以跟着设计模式来设计自己的框架何必要对spring指手画脚呢?(当然  你可以说我在造轮子了,但至少让我们对这个软件工程有了一个全新的认识,什么叫解耦,什么叫可复用。。等等诸如此类的问题我想都迎刃而解了!)
0 请登录后投票
   发表时间:2011-06-21  
感觉跟项目复杂程度有关,一个简单的数据记录查询(自学demo除外),能用JDBC就能完成,非要去用Spring+hibernate显然是不合理的,相反,大型项目却使用servlet+jdbc能让人疯掉,而使用Spring去管理事务,实体映射,参数封装,方法拦截会轻松很多。
0 请登录后投票
   发表时间:2011-06-22  
需要面试才回味的。。。平常想我只要 增删查改 加 if else
0 请登录后投票
   发表时间:2011-06-22  
这是很明显的容易打架的贴子,spring固然有好处,不然为啥像火一样烧便了j2ee界?

不能否认还有更好的,但是每种东西都会有适用性,就像servlet+jdbc也会有合适的时候
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics