【讨论】讨论下spring 本帖最后由 java2000_net 于 2008-06-14 07:36:28 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 sping核心是两种技术,IOC/DI和AOP,前者称为控制反转/依赖注入,主要是为了防止大量的工厂存在,而由容器来管理需要的bean,只需要在配置文件中进行配置,代码改动很小,比如要更换数据库啊,更换bean的属性啊,都可以在配置文件中进行操作,这就是注入;后者是面向切面编程,简单地说,spring的AOP可以将一个方法切开,加入其他的操作,具体的好处,恕小弟力薄,呵呵,还要多看些资料,希望大家共同进步! spring 很好很强大,无论是作为中间层,还是mvcweb曾都很前大 IoC的用处就是“装配”,比如你的Service方法里有个Dao(接口)属性,你可以给他装配一个DaoHibernate(实现了Dao接口)上去,也可以装配DaoJDBC(实现了Dao接口)上去,而修改装配只需要改配置文件,而不需要改源码,这就是IoC的好处吧AOP的典型应用就是事务管理,如果不用AOP,你每次访问数据库可能都要写这样的代码:public void update(){ try{ beginTransaction(); //这里是业务代码 commit(); }catch(Exception e){ e.printStackTrace(); rollback(); }finally{ con.close; }}业务代码可能就是一个update语句,但其它乱起八糟的开启事务、提交、回滚、关闭连接却要写上一堆,而且是每个访问数据库的方法都要写这一堆,update要写,insert要写,modify要写,serach要写,而AOP的作用就是让你从这些和业务没有直接关系的代码中解放出来使用了AOP之后,代码变成这样:public void update(){ //这里是业务代码}然后你只要在配置文件里把这个update方法配置成需要事务管理的,然后spring容器就会去帮你做开启事务、提交、回滚、关闭连接等等一堆事情,这就是靠AOP来实现的 您可以看看林信良的《spring技术手册》这本很好看。 简单的说spring引入了依赖注入使接口和实现类分离;spring还提供了声明式事务和编程式事务,使我们只需要去考虑业务逻辑,事务提交回滚的问题我们不用管了,spring的aop还能完成一些通用的功能;spring还无缝集合了struts和hibernate或者ibatis,使我们不用再手工去获取hibernate的sessionFactory,spring容器中的类是pojo,可以进行单元测试;spring还提供了一些额外的支持比如acegi,quartz等;spring还有个自己的mvc 可以看一下spring in action 不错的 我觉得看文档的话,最好还是直接去看spring官方的资料,那才是最权威的..我觉得不单ioc/di很好,aop很有用,spring的MVC也有很好的设计.. 先理解下简单工厂模式再看反射机制再看依赖注入马上就明白 当牛人需要时间spring的MVC也有很好的设计。。 我们的程序编写的过程中.需要一个对象.传统的做法是什么1:持有对象的引用,缺点:用new的话.有一个很大的缺点,就是你需要多少个对象.就需要new一下.如果你的项目需要几千个对象.难道你new几千个对象?显然这种方法不能满足我们的需求2:工厂模式:有一个接口。就需要一个工厂。但是有几百个接口的话。是不是需要几百个工厂呢。就是说你需要不同的对象。是不是每一种对象都需要创建一个工厂呢。显然。这也不理想。非常明显.上述两种方式都不行.要么.就是调用者和被调用者耦合的非常紧密.要么.就是被调用者和工程耦合的过于紧密.面向的对象的核心思想就是解耦合.减少代码量.于是IOC就应运而出了所谓IOC(依赖注入或者控制反转):当某个角色(调用者)需要另一个角色(被调用者)的协助时.通常是由调用者来创建被调用者的实例(实例).但是在IOC里.创建被调用者的工作不再由调用者来完成.因此被称为(控制反转).此时呢.创建被调用者(实例)的工作通常由Spring的容器来完成。然后在注入调用者。因此也称为依赖注入IOC设计模式,重点关注组件的依赖性。配置以及生命周期,也适用于简单类,应用代码需要告知容器或框架,让它们找到自身所需要的类,然后在由应用程序代码创建对象实例的任务交给IOC容器或框架 SPRING这个东西从官方的角度来看是非主流的产品,但是SPRING完全可以实现J2EE框架内的所有功能,比如EJB里面的实体BEAN是将数据从数据库中取出,包装成一个对象实体的形式提供给用户或其它BEAN,在SPRING里面就用hibernate来进行包装,会话BEAN就用其MVC结构来实现,而且最重要的是SPRING是轻量级的实现,EJB是重量级的实现,EJB在资源上的消耗可能用过的朋友都知道,SPRING非常轻便开发也容易和STRUTS加构比其灵活性更高. 以下引用自spring2.0-reference_final_zh_cn.chm依赖注入(DI)背后的基本原理是对象之间的依赖关系(即一起工作的其它对象)只会通过以下几种方式来实现:构造器的参数、工厂方法的参数,或给由构造函数或者工厂方法创建的对象设置属性。因此,容器的工作就是创建bean时注入那些依赖关系。相对于由bean自己来控制其实例化、直接在构造器中指定依赖关系或则类似服务定位器(Service Locator)模式这3种自主控制依赖关系注入的方法来说,控制从根本上发生了倒转,这也正是控制反转(Inversion of Control, IoC) 名字的由来。 应用DI原则后,代码将更加清晰。而且当bean自己不再担心对象之间的依赖关系(以及在何时何地指定这种依赖关系和依赖的实际类是什么)之后,实现更高层次的松耦合将易如反掌。 恩学习了一下,自己最近也在看sping,看了以上的说明,自己对spring也有了进一步的认识,谢谢了啊!继续学习中! 希望能出现一个高手,能用简短的话概括spring的核心虽然spring学的差不多,但有好多地方的意思没搞清楚 这几天在学习Spring 学习一下 Spring 是一个通用的粘合剂,它可以粘合许多流行的东西。当然你自己手工粘合也可以,看你个人的水平,爱好和工期要求了 Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。 当初自个儿学的时候,不知道为什么?工作开发项目后,才发现spring那么方便,可惜公司其他人员不用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就是用来减轻程序员负担,提高工作效率的。 你多用这个spring(春天)。多用用就自然知道了啊! 不明白就去实际操作一次。就知道这个术语是乜意思了晒! 这才叫精辟、我很赞同夏昕说过的一句话大意就是ioc和DI都不是好的描述、可能这确实跟语言习惯和文化背景有关...几乎可以确定的说老外公认的某“一句话概括”肯定不适合咱们、也好似我们看直译过来的日剧、净是些“...的吧”在我们看来莫名其妙的语言、其实人家就这么用。spring规范了面向接口编程、其技术基础是java的动态性(也就是class文件可以在运行时动态绑定)促进更符合ocp(对修改关闭对增加开放)原则的编码、说实话通过实践的感受就是所谓ocp原则在一般业务编码中没什么用、做个架构还是必须的。 我以前是学.net的,现在还是学.net的,将来还会学.net 我最近也在研究spring,想用他整合其他框架,正在努力学习中 jboss6.0 + jdk1.6 部署 cxf2.5.2 想做一个多站的教育行业的淘宝,求架构 集合remove问题 Java程序怎样脱离MyEclipse单独运行 servlet 关于spring多配置文件-分模块开发的问题 *.hbm.xml工作原理(求助) jsp 调用word 的问题? 免费服务器 JBoss服务器的问题(IE无响应) jsp中连数据库的问题--ResultSet rs=stmt.executeQuery(sql);不起作用---不能跳到指定页面 hibernate如何映射视图?
IoC的用处就是“装配”,比如你的Service方法里有个Dao(接口)属性,你可以给他装配一个DaoHibernate(实现了Dao接口)上去,也可以装配DaoJDBC(实现了Dao接口)上去,而修改装配只需要改配置文件,而不需要改源码,这就是IoC的好处吧AOP的典型应用就是事务管理,如果不用AOP,你每次访问数据库可能都要写这样的代码:public void update(){
try{
beginTransaction(); //这里是业务代码 commit();
}catch(Exception e){
e.printStackTrace();
rollback();
}finally{
con.close;
}
}业务代码可能就是一个update语句,但其它乱起八糟的开启事务、提交、回滚、关闭连接却要写上一堆,而且是每个访问数据库的方法都要写这一堆,update要写,insert要写,modify要写,serach要写,而AOP的作用就是让你从这些和业务没有直接关系的代码中解放出来
使用了AOP之后,代码变成这样:public void update(){
//这里是业务代码
}然后你只要在配置文件里把这个update方法配置成需要事务管理的,然后spring容器就会去帮你做开启事务、提交、回滚、关闭连接等等一堆事情,这就是靠AOP来实现的
spring还提供了一些额外的支持比如acegi,quartz等;
spring还有个自己的mvc
再看反射机制
再看依赖注入马上就明白 当牛人需要时间spring的MVC也有很好的设计。。
1:持有对象的引用,缺点:用new的话.有一个很大的缺点,就是你需要多少个对象.就需要new一下.如果你的项目需要几千个对象.难道你new几千个对象?显然这种方法不能满足我们的需求
2:工厂模式:有一个接口。就需要一个工厂。但是有几百个接口的话。是不是需要几百个工厂呢。就是说你需要不同的对象。是不是每一种对象都需要创建一个工厂呢。显然。这也不理想。
非常明显.上述两种方式都不行.要么.就是调用者和被调用者耦合的非常紧密.
要么.就是被调用者和工程耦合的过于紧密.
面向的对象的核心思想就是解耦合.减少代码量.
于是IOC就应运而出了
所谓IOC(依赖注入或者控制反转):当某个角色(调用者)需要另一个角色(被调用者)的协助时.通常是由调用者来创建被调用者的实例(实例).但是在IOC里.创建被调用者的工作不再由调用者来完成.因此被称为(控制反转).此时呢.创建被调用者(实例)的工作通常由Spring的容器来完成。然后在注入调用者。因此也称为依赖注入IOC设计模式,
重点关注组件的依赖性。配置以及生命周期,也适用于简单类,应用代码需要告知容器或框架,让它们找到自身所需要的类,然后在由应用程序代码创建对象实例的任务交给IOC容器或框架
学习了一下,自己最近也在看sping,看了以上的说明,自己对spring也有了进一步的认识,谢谢了啊!继续学习中!
虽然spring学的差不多,但有好多地方的意思没搞清楚
工作开发项目后,才发现spring那么方便,可惜公司其他人员不用spring。
映射工厂自己也可以写,的确,但是,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就是用来减轻程序员负担,提高工作效率的。
这才叫精辟、我很赞同夏昕说过的一句话大意就是ioc和DI都不是好的描述、可能这确实跟语言习惯和文化背景有关...几乎可以确定的说老外公认的某“一句话概括”肯定不适合咱们、也好似我们看直译过来的日剧、净是些“...的吧”在我们看来莫名其妙的语言、其实人家就这么用。
spring规范了面向接口编程、其技术基础是java的动态性(也就是class文件可以在运行时动态绑定)
促进更符合ocp(对修改关闭对增加开放)原则的编码、说实话通过实践的感受就是所谓ocp原则在一般业务编码中没什么用、
做个架构还是必须的。