某人发现的
----------------------------------------------------
听说Spring现在很Hot,于是baidu了一下,发现:  
  使用Spring有什么好处?  
            (1)Spring能有效地组织你的中间层对象。  
            (2)Spring能消除在许多工程中常见的对Singleton的过多使用。  
            (3)Spring能消除各种各样自定义格式的属性文件的需要,使配置信息一元化。  
            (4)Spring能够帮助我们真正意义上实现针对接口编程。  
            (5)在Spring应用中的大多数业务对象没有依赖于Spring。  
            (6)使用Spring构建的应用程序易于单元测试。  
            (7)Spring支持JDBC和O/R   Mapping产品(Hibernate)  
            (8)MVC   Web框架,提供一种清晰,无侵略性的MVC实现方式。  
            (9)JNDI抽象层,便于改变实现细节,可以方便地在远程服务和本地服务间切换。  
          (10)简化访问数据库时的例外处理。  
          (11)Spring能使用AOP提供声明性事务管理,可以不直接操作JTA也能够对事务进行管理。  
          (12)提供了JavaMail或其他邮件系统的支持。  
           
          什么是轻量(Lightweight)级容器?  
          Spring的开发者可以避免使用重量级容器开发EJB时的缺点:  
          (1)带有侵略性的API。(代码依赖于EJB)  
          (2)对容器的依赖。(代码不能在EJB容器之外工作)

解决方案 »

  1.   

    Spring架构上的好处在我们进入细节之前,让我们来看看Spring能够给工程带来的种种好处:Spring能有效地组织你的中间层对象,不管你是否选择使用了EJB。如果你仅仅使用了Struts或其他为J2EE的 API特制的framework,Spring致力于解决剩下的问题。Spring能消除在许多工程中常见的对Singleton的过多使用。根据我的经验,这是一个很大的问题,它降低了系统的可测试性和面向对象的程度。通过一种在不同应用程序和项目间一致的方法来处理配置文件,Spring能消除各种各样自定义格式的属性文件的需要。曾经对某个类要寻找的是哪个魔法般的属性项或系统属性感到不解,为此不得不去读Javadoc甚至源编码?有了Spring,你仅仅需要看看类的JavaBean属性。 Inversion of Control的使用(在下面讨论)帮助完成了这种简化。通过把对接口编程而不是对类编程的代价几乎减少到没有,Spring能够促进养成好的编程习惯。Spring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。使用Spring构建的应用程序易于单元测试。Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOs或local EJBs来实现业务接口,却不会影响调用代码。Spring帮助你解决许多问题而无需使用EJB。Spring能提供一种EJB的替换物,它们适用于许多web应用。例如,Spring能使用AOP提供声明性事务管理而不通过EJB容器,如果你仅仅需要与单个数据库打交道,甚至不需要一个JTA实现。Spring为数据存取提供了一个一致的框架,不论是使用的是JDBC还是O/R mapping产品(如Hibernate)。
      

  2.   

    Spring的主要目的是使J2EE易用和促进好编程习惯。 Spring不重新开发已有的东西。因此,在Spring中你将发现没有日志记录的包,没有连接池,没有分布事务调度。这些均有开源项目提供(例如Commons Logging 用来做所有的日志输出,或Commons DBCP用来作数据连接池),或由你的应用程序服务器提供。因为同样的的原因,我们没有提供O/R mapping层,对此,已有有好的解决办法如Hibernate和JDO。 Spring的目标是使已存在的技术更加易用。例如,尽管我们没有底层事务协调处理,但我们提供了一个抽象层覆盖了JTA或任何其他的事务策略。 Spring没有直接和其他的开源项目竞争,除非我们感到我们能提供新的一些东西
      

  3.   

    AOP是一种编程模式,它是从系统的横切面关注问题。传统的面向对象编程OOP主要从系统的垂直切面对问题进行关注,对于系统的横切面关注很少,或者说很难关注,这样当考虑到系统的安全性、日志、事务以及其他企业级服务时,OOP就无能为力了,只能在所有相关类中加入类似的系统服务级的代码。AOP为解决系统级服务问题提供了一种很好的方法。AOP将系统服务分解成方面看待,并为类提供一种声明式系统服务方式。Java类不需要知道日志服务的存在也不需要考虑相关的代码。所以,用AOP编写的应用程序是松耦合的,代码的复用性就提高了。
      

  4.   

    事实上,Spring中的事务处理是通过AOP思想来实现的,Spring AOP与Aspect J和JBoss具有很大的不同,首先,使用Spring AOP框架的用户要记住的一点是,Spring AOP针对的是方法层次上的实现,而其他两者对字段也提供了支持.说到Spring AOP的内幕,其实也不难,对于有接口的类,使用的是Java内部类提供的Proxy;而对于那些不实现接口的类,使用的是cglib库,动态创建一个子类来实现.   在Spring AOP中提供了4种处理切入类型:around,before,after,introduction.  1)around是针对具体的某个切入点的方法(比如,现在有个OrderBook方法,around的切入类型是就这个方法的内部调用,是通过java的元数据,在运行时通过Method.invoke来调用,具有返回值,当发生意外的时候会终止.记住的一点是,返回值.);  2)before是在方法调用前调用(在OrderBook方法前调用,但是没有返回值,同时在通常意外情况下,会继续运行下一步方法.记住的一点是没有返回值);  3)after和before刚好相反,没有什么特别的地方.  4)introduction是一个更加特殊的,但功能更加强大的切入类型.比如(你现在有Book对象,Computer对象,还有几十个这种业务对象,现在你希望在每个这样的对象中都加入一个记录最后修改的时间.但是你又不希望对每个类都进行修改,因为太麻烦了,同时更重要的一点,破坏了对象的完整性,说不定你以后又不需要这个时间数据了呢...这时怎么办呢?Spring AOP就为你专门实现这种思想提供了一个切入处理,那就是introduction.introduction可以为你动态加入某些方法,这样可以在运行时,强制转换这些对象,进行插入时间数据的动作,更深的内幕就是C++虚函数中的vtable思想).不过这种动态是以性能作为代价的,使用之前要慎重考虑,这里我们谈的是技术,所以就认为他是必需的。
      

  5.   

    狗屁!
    (2)Spring能消除在许多工程中常见的对Singleton的过多使用。  
    (3)Spring能消除各种各样自定义格式的属性文件的需要,使配置信息一元化。  是个人就能看出来这两条纯粹屁话,Singleton怎么了,干嘛要消除?“降低了系统的可测试性和面向对象的程度”说这种类似算命先生一样的模棱两可的屁话的人应该把他的嘴缝上。(4)Spring能够帮助我们真正意义上实现针对接口编程。 也就这句话有点用,spring属于一种要你去扩展去包装才能体现价值的东西,它和struts、hibernate不一样不是拿来一用就立竿见影的东西。spring像v12发动机,你得为它造部好车然后装上它才行。
      

  6.   

    我感觉spring带来的是一种模式的应用,在实际应用中spring主要就是用他的ioc容器来管理bean和aop来管理事务,这两项给我们工作确实带来了很大的方便!同时他对主流web框架以及持久框架的整合也给我们带来了很大的方便,比喻说他引入的JPA的实体管理器,这样我们在代码编写的时候就不用配置复杂的事务,更不用关心持久层到底用哪个了!
      

  7.   

    上面的长篇大论是从书上粘过来的吧?跟精通Spring上说的一样的
      

  8.   

    老师曾讲过 ,Spring 主要应用在对象的创建上,把一个接口(接口里定义方法)对象写在源码里,不同的类实现接口,实现接口里的方法,通过配置文件灵活的源码里的接口对象指向不同的引用,从而执行不同的方法,产生不同的效果,在项目修改时基本不用修改源码。举个例子<beans> 
          <bean id="myData"
    class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName">
    <value>java:comp/env/jdbc/OracleDB</value>
    </property>
    </bean>
          <bean id="sessionFactory"
                 class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" 
              destroy-method="close">
          <property name="dataSource">
               <ref bean="myData"/>
          </property>
           <property name="mappingResources"> 
                <list> 
                    <value>ssh/po/Spring.hbm.xml</value> 
                </list> 
            </property> 
            <property name="hibernateProperties"> 
                <props> 
                    <prop key="hibernate.dialect"> 
                        org.hibernate.dialect.Oracle9Dialect
                    </prop> 
                    <prop key="hibernate.show_sql">
                         true
                    </prop>
                </props> 
            </property> 
            
          </bean>
    如果我们不使用数据库连接池了,使用另外一个类来创建“dataSource”
      <bean id="myData" 
             class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName">
                <value>oracle.jdbc.driver.OracleDriver</value>
            </property>
            <property name="url">
                <value>jdbc:oracle:thin:@127.0.0.1:1521:quanwei</value>
            </property>
            <property name="username">
               <value>scott</value>
            </property>
            <property name="password">
               <value>tiger</value>
            </property>
         </bean>修改一下配置文件,源码不许任何改动
      

  9.   

    觉得就两样,dependency injection , AOP
    其它的framework可能也有。
      

  10.   

    1.低侵入式设计,代码的污染极低.2.独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once ,Run Anywhere的承诺.3.Spring的DI机制降低了业务对象替换的复杂性.4.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分和全部.
      

  11.   

    多做项目慢慢体会,spring有两个重要的东西IOC、AOP
    另外通过修改配置文件总比直接修改程序要好
      

  12.   

    与hibernate集成了几天也没集成出来!火ING!