日期:2014-05-20  浏览次数:20715 次

【讨论】讨论下spring
以前一直用的.net,现在由于项目需要学习j2ee,stuts\hibernate框架都很好理解,看到spring时,有点头大,看过网上的一些牛人写的文章,感觉spring就是一个实现同一接口的反射工厂么,既然有反射工厂的存在,为什么还要用spring,可能我刚刚接触,希望大牛们不要笑我,我想彻底的理解spring,最好是有一段简单的代码+文字说明型的,谢谢大家了

------解决方案--------------------
简单的说

spring引入了依赖注入使接口和实现类分离;spring还提供了声明式事务和编程式事务,使我们只需要去考虑业务逻辑,事务提交回滚的问题我们不用管了,spring的aop还能完成一些通用的功能;

spring还无缝集合了struts和hibernate或者ibatis,使我们不用再手工去获取hibernate的sessionFactory,spring容器中的类是pojo,可以进行单元测试;
spring还提供了一些额外的支持比如acegi,quartz等;
spring还有个自己的mvc


------解决方案--------------------
我们的程序编写的过程中.需要一个对象.传统的做法是什么
1:持有对象的引用,缺点:用new的话.有一个很大的缺点,就是你需要多少个对象.就需要new一下.如果你的项目需要几千个对象.难道你new几千个对象?显然这种方法不能满足我们的需求
2:工厂模式:有一个接口。就需要一个工厂。但是有几百个接口的话。是不是需要几百个工厂呢。就是说你需要不同的对象。是不是每一种对象都需要创建一个工厂呢。显然。这也不理想。
非常明显.上述两种方式都不行.要么.就是调用者和被调用者耦合的非常紧密.
要么.就是被调用者和工程耦合的过于紧密.
面向的对象的核心思想就是解耦合.减少代码量.
于是IOC就应运而出了
所谓IOC(依赖注入或者控制反转):当某个角色(调用者)需要另一个角色(被调用者)的协助时.通常是由调用者来创建被调用者的实例(实例).但是在IOC里.创建被调用者的工作不再由调用者来完成.因此被称为(控制反转).此时呢.创建被调用者(实例)的工作通常由Spring的容器来完成。然后在注入调用者。因此也称为依赖注入IOC设计模式,
重点关注组件的依赖性。配置以及生命周期,也适用于简单类,应用代码需要告知容器或框架,让它们找到自身所需要的类,然后在由应用程序代码创建对象实例的任务交给IOC容器或框架

------解决方案--------------------
Spring 是一个通用的粘合剂,它可以粘合许多流行的东西。

当然你自己手工粘合也可以,看你个人的水平,爱好和工期要求了
------解决方案--------------------
个人体会,Spring的3大功能的优点:

DI:
 映射工厂自己也可以写,的确,但是,Spring的DI可以把Java代码用XML来操作,比如说定义一个类是Singleton还是动态生成多个实例,只要更改xml的一个属性设定,不用再写代码了。这种工作量的差别不说也知道。
 甚至说,可以用DI来管理整个程序的实例,做顶部开发的人不需要考虑在那里生成实例,只要修改xml就可以得到自己想要的东西。
 最重要的事,整个修改不需要重新编译代码,顶多重启动服务器————这一点对于配置正在运行的web程序非常重要。无论是有技术还是政治方面,都可以省去不少工作量。

AOP:
 Spring的AOP一般都是跟DI结合,比如说,你想要让用户访问地址A的时候做管理员认证。而管理员认证就可以作为一个单独的模块,通过xml配置到地址A的前面。
 经过N个月后,客户要求发生了改变,地址A不需要管理员认证,地址B要加入管理员认证。Spring的做法就是修改XML,外加充启服务器,快的话,可能几分钟就可以完成。
 这根直接编写代码的工作效率的差别,恐怕是一个天上一个地下。

MVC:
 它可以把Model、View和Controller分得一清二楚,管设计的不用看程序,管程序的不用管设计,只要提供接口。而且,可以模板引擎不只局限于JSP,可以灵活使用任何一种适合自己口味的Java模板


总之一句话,Spring就是用来减轻程序员负担,提高工作效率的。