什么是spring: 使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

目的:解决企业应用开发的复杂性

功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

范围:任何Java应用

Spring是一个分层构架,意思是你可以选择只用它的一部分,而不影响其他。它的构架体系是内部相容的。所以,你将会在你的学习曲线中获得最大价值。

例如,你可以选择只用Spring 的JDBC 单一应用或者用Spring 管理你的业务对象。

Spring 可以有效的组织你的中间层对象,无论你是否选择了EJB. Spring关心的是那些如果你选择Struts或者其他的使用特定的J2EE APIs的框架而留给你自己完成的部件。

Spring可以消除在许多projects中出现的Singlton的大量使用。主要的问题是, 减弱了测试能力和面向对象。

Spring 可以消除规定多样的定制属性文件的需要, 用一致的配置操作贯穿整个应用和项目。多样的属性健或者系统属性寻找使你不得不去读Javadoc 或者甚至是源代码?然而,Sping可以使你非常简单地看到这些class 的JavaBean的属性。

可以帮助你完成简化。

Spring 可以使良好的编程习惯更容易培养,利用接口代替classes 减弱编程成本,降至最小。

Spring 的设计使依靠很少的APIs 建立应用成为可能。 在Spring 应用中的许多业务对象根本不要依靠Spring.

利用Sping 建立的应用使单元测试变得非常简单。

Spring 是使用EJB成为一个选择,优于成为决定性的应用构架。你可以选择作为POJOs或者local EJBs 扩展业务借口,而不影响调用代码。

Spring 可以帮助你解决没有EJB的许多的问题。Spring可以提供适应许多web应用的EJB的替换方案……例如, Spring 可以借用AOP 提供声明事务管理,在不用EJB容器的情况下。

如果你只需要工作在单个的数据库上面, 甚至不用JTA 的支持。

Spring 提供了一致的数据访问框架, 无论用JDBC 或者像Hibernate 一样的O/R mapping 产品。

■ 轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。

■ 控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。

■ 面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。

■ 容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。

■ 框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。

所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。

为什么要用spring
Spring是基于j2ee框架,它站在非常实用的角度帮助程序员解决了很多不需要程序员搞和程序员一直重复搞的问题. 下面我只讲能节省我们工作的地方以使得大家对spring有足够的兴趣.

1, 松耦合问题.

这个问题我不费太多笔墨. 因为太多的文章解释这个问题. 大名叫:依赖注入. 说白了就是根据配置文件动态组装复杂对象. 或许有人又问, 我就是用程序组合也很简单啊. 是的, 你程序组装简单业务的是很简单. 如果组装的对象里面包含了Ejb, 包含了JMS, 包含了远程RMI那就没有这样组装简单了. 就说到这里.不说那么多废话.

2, AOP, 面向切面编程.

这个功能我们自己是不好设计的. 这个功能大家也都知道是干什么的, 例如方法的事务管理, 用户安全验证, 日志记录, 等等. 为了避免将更多的代码放进方法中去.spring使用这个AOP来监控符合你配置的正则表达式的方法名字. 并允许在执行这个方法的前后执行你的方法. 这个是建立在spring上下文框架下的一个功能. 原理是映射机制. 如果没有上下文是不好搞的.

虽然spring AOP对于大多程序员就足够了. 但与AspectJ相比, 他只能是功能比较弱的解决方案. AspectJ提供了SpringAOP不可能实现的多种切点类型. 如果不够用,你可以引入AspectJ. 来帮助你做更多的工作.

上面两个是大的方面的一个简单的说明. Spring在更多细节中方便了大家的工作. 下面我继续依次给以说明.

3, Bean工厂节省了.

你不用再自己构造工厂了. 不用再用自己构造单例模式了. 不用自己再关心对象的创建了. 不用new对象了. 一切都直接从 上下文的框架中取就行了. 框架会帮助你构造你需要的对象. 你只需要跟上下文打交道就可以了. 当然,你多出了装配的工作. 但这是必须要付出的代价. 因为复杂性被集成在了配置里面. 使得你在开发层面只关心业务. 要是配置有可视化的工具就太好了. 但别着急, 找找, 现在只有想不到,没有找不到.

4, 集成Hibernate使用节省了事务的显式代码.

这个其实还是切面的一个好处应用. 配置进去是很简单. 既然能节省工作, 我就给你说一下.

5, Spring 针对不同的数据库访问模式提供了不同的模板. 分别适用于不同的持久机制.

包括:针对JCA CCI的链接, 针对JDBC的, 支持命名参数的JDBC的链接, Hebernate的,针对iBATIS sqlMap的, Oraclede TopLink的. 这些模板使用方式的统一降低了程序员使用不同数据库的成本.模板的使用让你只关心数据的准备, 而看不到那些样板代码, 其实那些样板代码都还在, 只是被巧妙的隐含到了template中了.

例如: List list = jdbcTemplate.query(“select * from table1”,new Object[]{“a”,”b”},new RowMapper(){…..}); 意思表达到了.

其中对数据源的引用可以配置使用JNDI以从应用服务器中获取数据库的连接. 这样程序就可以集中处理业务逻辑而不必关心数据库的具体情况 .

如果不能从JNDI中取得, 那就必须在spring中配置一个连接池. 可以使用开源的DBCP. 这个支持多种数据库连接.

6, 数据库层面的缓存的使用.

Spring并不提供实际的缓存解决方案, 而是要以来第三方的缓存方案. 包括: EHcache,Gigaspaces, JBoss Bache, JCS, OSCache, Coherence .无论采用哪种缓存方案, 对于spring的配置都是一样的. 但缓存的配置文件都是要分开的. 简化了使用缓存的成本.

7. 安全验证方面节省的工作.

基于多种方式的用户验证. 都节省了很多工作.

8, 访问 RMI , 访问 Http Invoker, 访问Web Service

如果要穿越防火墙最后是后两种. 但httpInvoder局限于spring的对象. webService 可以多种.平台. 不管使用哪种, spring都为他们的配置提供了统一简单的配置. 使用起来非常方便. Xfire协助你访问webService简单易用。

9, JMS的访问.

大量冗余的代码被节省了. 配置好了即可使用. 当然你需要使用activeMQ第三方的队列服务器来接受消息。

10 , 访问EJB..

JNDI都非常简单了. 所有额外的工作,你配置好之后, spring都帮你做了。你要做的就是, 使用。


 来自www.fundfund.cn 详文参考:http://www.fundfund.cn/news_200925_37349.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值