Spring进阶(一)—宏观介绍


背景


J2EE开发企业软件时经常遇到以下两个问题

问题一:对象太多如何进行管理

问题二:相同逻辑与业务逻辑总是纠缠在一起,耦合性特别高

 

出现


    Spring是一个轻量级、非侵入式的Java开源框架,为了简化企业开发。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为J2EE 应用程序开发提供集成的框架。Spring的核心是控制反转(IoC)和面向切面(AOP)。

    未使用Spring


 

    使用Spring



注:

    IOC的实质是管理对象。传统开发使用new方式来创建对象,但在企业应用开发过程中,大量的对象创建都在程序中维护容易造成资源的浪费,不利于程序的扩展。

    非侵入:框架的代码不会侵入到开发者自己的代码中,框架代码与开发者代码是分离的,仅通过配置文件来关联,解耦和;

    侵入:框架的代码会掺和进开发者自己写的代码中。

 

核心


   1IOC:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器 (在 Spring 框架中是 IOC 容器) 负责将这些联系在一起。在典型的 IOC场景中,容器创建了所有对象,并设置必要的属性将它们连接在一起,决定什么时间调用方法。

 

实例:

    User类想调用Work类的方法AddWorkInfo()方法

以前:必须在在User类中这样写:
    User user=new User(); user.AddWorkInfo()
现在: 配置文件ApplicationContext会对A和B间的调用关系进行管理

  <bean id="workManager" class="com.bjpowernode.spring.manager.Work">
  <bean id="userManager" class="com.bjpowernode.spring.dao.User"/>
      <property name="userDao" ref="workManager"/>
  </bean>

客户端:
	BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
	UserManager userManager = (UserManager)factory.getBean("userManager");
	userManager.addWork();

   2AOP:面向方面的编程,它允许程序员对横切关注点的职责分界线的行为(例如日志和事务管理)进行模块化。AOP 的核心构造是方面,它将那些影响多个类的行为封装到可重用的模块中。

    AOP 和 IOC是补充性的技术,它们都运用模块化方式解决企业应用程序开发中的复杂问题。在典型的面向对象开发方式中,可能要将日志记录语句放在所有方法和 Java类中才能实现日志功能。在 AOP 方式中,可以反过来将日志服务模块化,并以声明的方式将它们应用到需要日志的组件上。优势就是 Java类不需要知道日志服务的存在,也不需要考虑相关的代码。所以,用 Spring AOP 编写的应用程序代码是松散耦合的。

 

优点:


1.DI机制降低了业务对象替换的复杂性,使组件间解耦

2.AOP支持将通用任务如事务、日志等进行模块管理,提供了更好的复用

3.Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问

4.Spring并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部

5.独立于各种应用服务器,基于Spring框架的应用,真正实现"一次编译,到处运行"

 

EJB VS Spring

 

    EJB最初的设计思想是为分布式应用服务的,但现在大多数应用不需要采用分布式解决方案,因此EJB显得太臃肿。Spring的出现正好解决了这个问题。

 

相同点:

    共同的核心设计理念:它们的目标是为松耦合的POJO类提供中间件服务。框架通过在运行时截取执行环境,或将服务对象注射给POJO类的方式,将应用服务和POJO类“连接”起来。POJO类本身并不关注如何“连接”,而且也很少依赖于框架。开发者可以将注意力集中在业务逻辑上,并且由于POJO类不需要继承框架的类或实现框架提供的接口,开发者可以在更加灵活性的基础上构建继承体系,和搭建应用。

 

不同点:

    EJB规范一直由国际组织JCP来制定,一经通过,即作为官方标准,全球通用。你可以轻松的架构间进行切换。Spring来自开源社区,由众多的开源软件开发者参与,逐步形成有的一种流行的标准体系。最终的选择在设计之初一旦确定,要想更换便不那么容易,移植性差。

   EJB 必须运行在 Java EE 应用服务器的 EJB 容器中,而 Spring 不必。

   EJB 适合组件化的分布式应用,而 Spring 不适合这些。

    Spring的编程接口主要基于XML配置文件,而EJB3.0则大量的使用了JAVA注解。XML文件可以表达复杂的关系,但是它们更加冗长而且不健壮。注解的方式很简单明了,但是很难去表达复杂的或者继承性的结构。

 

小结:


      无论是Spring,还是EJB理解的还比较浅显,还不能说出孰优孰劣,随着以后的总结慢慢去深入和提升,然后根据实际情况决定使用哪一个。以后会在实践中再去反复总结和深入。

 

         

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值