spring 概念理解

     Spring,我个人觉得对一个JAVA开发人员来讲是一个很重要的东西,无论你是学习J2EE还是学习编程模式。SPRING带给你的可以不仅仅是一个应用的架构,而是真正JAVA主流技术的体现。如果你能完全理解SPRING的精神,恭喜你,你已经属于不一般的开发人员了。这篇文章为自己梳理SPRING的理解做一个总结,希望有高人能不断指点。

    

     IOC和AOP,这两个是SPRING中最核心的两个思想。

     AOP(Aspected Oriented Programming)是一种新兴的编程技术。面向方面编程 (AOP) 提供从另一个角度来考虑程序结构以完善面向对象编程(OOP)。 面向对象将应用程序分解成各个层次的对象,而AOP将程序分解成各个方面或者说关注点 。Spring的一个关键组件就是AOP框架。

 

    在J2EE应用中,AOP拦截到方法级的操作已经足够。OOP倡导的是基于setter/getter 的方法访问,而非直接访问域,而Spring 有足够理由仅仅提供方法级的连接点。为了使控制反转(IoC)很方便的使用到非常健壮、灵活的企业服务,则需要Spring AOP 的实现。用Spring AOP实现开发中松散耦合,这个正是SPRING的最终目的,暂时牺牲一点效率不要紧,关键是给大家带来了一种全新的设计理念。效率可以继续提高,理念才是科学解决问题之道。我也在不断理解它,这需要一点时间去琢磨。

 

   IoC又被翻译成“控制反转”,它其实是一种设计模式,Spring只是实现了这种设计模式。一个人学习编程一般都有这么几个阶段:

   第一阶段:用普通的无模式来写Java程序。一般初学者都要经过这个阶段。
   第二阶段:频繁的开始使用接口,这时,接口一般都会伴随着使用工厂模式。
   第三阶段:使用IoC模式。工厂模式还不够好:(1)因为的类的生成代码写死在程序里,如果你要换一个子类,就要修改工厂方法。(2)一个接口常常意味着一个生成工厂,会多出很多工厂类。

 

   可以把IoC模式看做是工厂模式的升华,可以把IoC看作是一个大工厂,只不过这个大工厂里要生成的对象都是在XML文件中给出定义的,然后利用Java的“反射”编程,根据XML中给出的类名生成相应的对象。从实现来看,IoC是把以前在工厂方法里写死的对象生成代码,改变为由XML文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。

 

   IoC最大的好处是什么?因为把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是现实于某种接口的),只要修改XML就可以了,这样我们甚至可以实现对象的热插拨(有点象USB接口和SCIS硬盘了)。

 

    IoC最大的缺点是什么?(1)生成一个对象的步骤变复杂了(其实上操作上还是挺简单的),对于不习惯这种方式的人,会觉得有些别扭和不直观。(2)对象生成因为是使用反射编程,在效率上有些损耗。但相对于IoC提高的维护性和灵活性来说,这点损耗是微不足道的,除非某对象的生成对效率要求特别高。(3)缺少IDE重构操作的支持,如果在Eclipse要对类改名,那么你还需要去XML文件里手工去改了,这似乎是所有XML方式的缺憾所在。

 

    Spring中IOC的实现的核心是其Core Bean Factory,它将框架内部的组件以一定的耦合度组装起来,并对使用它的应用提供一种面向服务的编程模式(SOP:Service-Orient Programming),比如Spring中的AOP、以及持久化(Hibernate、ibatis)的实现。这里就是我为什么这么看好SPRING的原因,它把众多服务都耦合进来,提供一种协议化的服务,耦合看起来是那么的美妙,我们有了SPRING,可以少写好多冗余的代码了哦!比如JDBC,HIBERNATE,IBATIS,JMS,JTA等等,获得相应的模板,你就可以对它们进行操作了。JMS类似可以用getJmsTemplate(),JDBC可以用getJdbcTemplate(),IBATIS中的getSqlMapClientTemplate(),是不是有点领会了啊,呵呵。所以我看好SPRING,RMI,WEB SERVICE它都能搞定,你还有什么理由不去用SPRING了?

 

   记住五个字:松散的耦合,真正理解它后,你会明白我为什么要你记住它了。

 

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值