面试中经常闻到项目中为什么要使用spring?说说他的好处~~我快崩溃了。。。

iso_wangjian 2011-02-24 02:32:48
如题,没事的进来唠叨唠叨~~~
...全文
1343 46 打赏 收藏 转发到动态 举报
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
LUILULU 2011-04-03
  • 打赏
  • 举报
回复
进来学习学习
zhangjun460 2011-03-30
  • 打赏
  • 举报
回复
AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用 AOP 后,公共服务 (比 如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。

IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。正如单词 倒置 所表明的,IOC 就像反 过来的 JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight construction),每一个对象都是用 其协作对象构造的。因此是由容器管理协作对象(collaborator)。

Spring即使一个AOP框架,也是一IOC容器。 Spring 最好的地方是它有助于您替换对象。有了 Spring,只要用 JavaBean 属性和配置文件加入依赖性(协作对象)。然后可以很容易地在需要时替换具有类似接口的协作对象。
ituuz 2011-03-17
  • 打赏
  • 举报
回复
DI和IOC确实不一样,如果面试说就是一个东西,肯定挂。
iso_wangjian 2011-03-09
  • 打赏
  • 举报
回复
1.对I/O进行远程调用时,将调用环境流化后对不需要的用到的对象使用transent关键字修饰。
2.创建对象时尽量在使用的时候去实例,实例完以后如果返回的不时该对象尽早将该对象设置为null。
3.对static关键字使用时要慎重考虑,因为被static关键字修饰后,该对象的生命周期就会变成,内存不易释放,会造成内存浪费的。
4.在使用applt应用时,applt程序将会加载到客户端的内存中,并且是通过网络分布式传的,如果classic文件大会增大网络开销,降低网络速度,造成客户端内存浪费,
编译Java应当使用javac -g:none X.java编译,这样编译后生成的.class文件的字节比直接 javac X.java的字节要少。
5.减少finalzie函数的调用,这样会增加GC的频繁调用,加大其工作。
coooliang 2011-02-26
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zhuchao_ko 的回复:]

[Quote=引用 11 楼 wangjian223344 的回复:]
IOC 就是DI呀。[/Quote]

呵呵 你这话说出来丢脸不。
[/Quote]

一个叫控制返转 一个是叫依赖注入

依赖注入表达得更确切一些
曾经有很多人为之争议但是
它们是一样的


  • 打赏
  • 举报
回复
IoC 容器时下有很多,Spring 就是宣传力度大。正印证了产品做得好,不如广告做得好。
qinhualee 2011-02-26
  • 打赏
  • 举报
回复
面试时经常问的,都是讲讲理论
jackra 2011-02-26
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 iso_wangjian 的回复:]
我struts、HIb 、spring都会用,但是要说深入点真是不好讲 一谈起spring就会讲IOC和AOP,但是为何要用这两个东西?为什么不选择其他的框架?
我很无语,还是自己懂得太少了。
[/Quote]
我来回答你这个问题。
为什么要使用,都是从设计角度去理解,才能明白他们起到的作用和所带来的影响。
大部分程度的面试尤其是行业软件开发类别的,基本不会让一个新手或者一个非核心的老手进入核心层的设计实现的。那么他们提出这样的问题,不过是人云亦云的东西,考察的,就是背书的能力和眼界的问题。
而如果是需要一个进入核心层的工作,那么考察的内容会更多更复杂,一方面是经验,一方面是能力,另外就是眼界和对这些东西的理解。
struts、HIb 、spring提供了一套解决方案,struts对于界面层的处理,有完善的管理和实现方案,他本身的能够在应对传统web应用的很多地方,另外也没有屏蔽掉任何的web上的功能,最大的作用就是标准化开发过程。
HIb 的功能,就更加强大,本身HIb并不依赖任何具体的实现,所以只要有针对数据库的程序或者说项目,都有它的用武之地,同时,他的本多功能能够避免许多的资源管理和sql注入所引发的问题,并且在简化开发和提供安全性解决方案上作用很大。
spring本身的功能最主要体现在构建标准化对象上,这些标准化的对象在不同的开发环境或者不同的项目里,都会有许多的变化,那么,如何对这些变化进行管理,让核心的组件在尽量不改动的情况下适应更复杂的应用环境?就是由注入依赖转变向配置依赖。于是,在结构不变化的情况下,组件就有了更大的适用空间。
为什么很多地方都在考这样的问题,因为他们自身的体系结构建筑在这样的体系之上。同时流行的东西,就可以得到不太需要大量培训来适应的人工,一方面节约成本,另一方面保证人员的即用即得。

如果具体到哪些地方应该使用哪些技术,就需要在设计和规划上进行提高,并且增加自己的所见所遇,才能得出的结论了。好的软件思想,就是增加重用性来降低开发的成本和保证组件稳定,避免因人和环境的因素引发的风险或过多的成本投入。在基于这样的理论之上,才能去理解工具和框架对整个传统的过程中的这些可能引发问题的地方提供的简单又方便的解决方案。

最后我想说明的是:现在大部分的面试成败于否,与个人的关系不大,最重要是公司的用人需求,即便是再优秀的人才,在一个不需要人才的公司,也是毫无价值的。针对一些需要技术和需要变革的公司,那么你需要的是展示你自己的才华,而针对一些不需要复杂技术,只需要按部就班的工作,那么你需要的是展示你的适应能力和学习能力,更重要的是稳定性。

不要过多的关注别人如何解释一个名词,这些名词的解释对公司的项目和对个人的能力来说没有任何的意义,企业需要的是创造价值的人才,而不是名词字典。那些拿各种术语出来唬人的人,你可以不用理会他们。
jeky_zhang2013 2011-02-25
  • 打赏
  • 举报
回复
学会灵活运用最重要~~~~
guo777ju 2011-02-25
  • 打赏
  • 举报
回复
spring就是把通过配置文件把复杂的框架用配置文件给简单化了,不用很明白,会用就行
yanebupt 2011-02-25
  • 打赏
  • 举报
回复
spring里两个重要的概念AOP,IOC,基本涵盖了spring的功能特点,面试时只要解释下什么是AOP,IOC,然后结合项目举例说明就是很好的回答
野生大猫 2011-02-25
  • 打赏
  • 举报
回复
太大了 说不清 买本书多看看吧 先把structs看看 在看看 hibernate 或 Ibatis
muqingren1978 2011-02-25
  • 打赏
  • 举报
回复
.......................这问题
无聊找乐 2011-02-25
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 ztglf521 的回复:]
IOC是个比较大的概念, 以下是它的两种实现:

依赖查找:容器提供回调接口和上下文环境给组件。 EJB 和 Apache Avalon 都是使用这种方式。

依赖注入(DI):组件不做定位查询,只是提供普通的 Java 方法让容器去决定依赖关系。容器全权负责组件的装配,它会把符合依赖关系的对象通过 JavaBean 属性或者构造子传递给需要的对象。通过 JavaBean 属性注射依赖关系……
[/Quote]

为什么要这样做呢
我在肖申克 2011-02-25
  • 打赏
  • 举报
回复
IOC是个比较大的概念, 以下是它的两种实现:

依赖查找:容器提供回调接口和上下文环境给组件。 EJB 和 Apache Avalon 都是使用这种方式。

依赖注入(DI):组件不做定位查询,只是提供普通的 Java 方法让容器去决定依赖关系。容器全权负责组件的装配,它会把符合依赖关系的对象通过 JavaBean 属性或者构造子传递给需要的对象。通过 JavaBean 属性注射依赖关系的做法称为设值方法注入( Setter Injection );将依赖关系作为构造子参数传入的做法称为构造子注入( Constructor Injection )。
jackra 2011-02-25
  • 打赏
  • 举报
回复
spring
我是没怎么用过
如果说在项目里的应用,应该是在重用的过程中的支撑比较重要吧?
1:常量
比如一个项目中,我们需要的一些常量是ABCD,在另外一个项目中,重用部分的计算结构,但是常量变为abcd,那么只要去修改spring的文件就足够了.
2:变化对象的创建
比如在某个数据库环境中,建立连接需要的固定字串是abcd,再另一个环境,可能需要ABCD,那么也可以通过修改spring来完成
3:跨编码平台应用
xml本身是有编码标识的,如果出现不同编码机器上部署,那么文件型结构或许会出现乱码问题,也可以通过spring解决.
4:嵌套对象
比如A对象,需要b类型的对象支撑,但是在不同的环境,需要b类型对象的不同实现,也可以通过spring的修改来解决.
别的暂时想不到了........也求答案.
无聊找乐 2011-02-25
  • 打赏
  • 举报
回复
对spring不感冒
宁波朱超 2011-02-25
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 clarck_913 的回复:]
引用 10 楼 zhuchao_ko 的回复:

引用 8 楼 fengxuegupo 的回复:
AOP+IOC


DI 怎么不说 ?



DI就是IOC的另外一个叫法
[/Quote]

Google for "ioc di 区别"

第一条记录。
http://tianye.javaeye.com/blog/334965

其实HR这样问的要的是:

DI和IOC是差不多的概念。
一个重要特征是接口依赖,是把对象关系推迟到运行时去确定.
DI是一个初始化实例的过程,分为三种1.setter based 2.constructor based 3.interface based,在spring 中就是应用前两种;但又不仅仅是初始化实例,而且是运用接口的概念去实现这种注入依赖。静态地看,只是依赖一个接口,但实际运行起来,是依赖一个实现了该接口的具体类。
IOC就是面向接口编程的应用
1.一个通常的做法(非面向接口编程的方法),对象A依赖对象B,B会作为A的属性,可以理解为A直接控制B;
2.IOC的做法,对象A依赖于接口C,而不直接依赖于实现了接口C的B,也就是A不能直接控制是哪个具体实现了C的B去做相应的事情,而是由我们控制可以由哪个实现了接口C的B去处理,也就是控制反过来了,是由B来决定了,而不是由A,实现就是面向接口编程。

如果你只说 “差不多” 或者是 “IOC 就是 DI” 那肯定不会让HR满意,是么?

好比 J2EE 跟 JAVA EE。

野生大猫 2011-02-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wangjian223344 的回复:]

学习东西应该先学脉络,后学原理,你最好先会用在一点一点了解。
{AOP+IOC
DI 怎么不说 ?} IOC 就是DI呀。只是不怎么叫。
建议先看看反射和动态代理的视频。
IOC说简单就是写XML里,以前你自己new对象,现在容器帮你了哈。
AOP就是|---你的逻辑--|  在你的逻辑前和后,加一些东东。比如说:struts 的拦截器与过滤器、你有记录一些LOG呀,声明式的事物管理呀……
[/Quote]

引用下! 这东西 完全学会不是很容易的
停留在应用层 就当她是块模板就好
  • 打赏
  • 举报
回复
只看一些还是不太管用,说白了还是经验之谈。。只有用多了,才能真正了解,这么说只能是个大概其,是个方向
加载更多回复(25)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧