使用open source产品组装你的web应用架构(三)


<script type="text/javascript">function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>

下面是HibernateSessionFactory   HibernateTransactionManager:的配置:

<bean id="mySessionFactory"
      
      
       class="org.springframework.orm.hibernate.
      
      
              LocalSessionFactoryBean">
      
      
  <property name="mappingResources">
      
      
    <list>
      
      
      <value>
      
      
        com/meagle/bo/Order.hbm.xml
      
      
      </value>
      
      
      <value>
      
      
        com/meagle/bo/OrderLineItem.hbm.xml
      
      
      </value>
      
      
    </list>
      
      
  </property>
      
      
  <property name="hibernateProperties">
      
      
    <props>
      
      
      <prop key="hibernate.dialect">
      
      
        net.sf.hibernate.dialect.MySQLDialect
      
      
      </prop>
      
      
      <prop key="hibernate.show_sql">
      
      
        false
      
      
      </prop>
      
      
      <prop key="hibernate.proxool.xml">
      
      
        C:/MyWebApps/.../WEB-INF/proxool.xml
      
      
      </prop>
      
      
      <prop key="hibernate.proxool.pool_alias">
      
      
          spring
      
      
      </prop>
      
      
    </props>
      
      
  </property>
      
      
</bean>
      
      

     
     
      
       
     
     
<!-- Transaction manager for a single Hibernate
      
      
SessionFactory (alternative to JTA) -->
      
      
<bean id="myTransactionManager"
      
      
         class="org.
      
      
                springframework.
      
      
                orm.
      
      
                hibernate.
      
      
                HibernateTransactionManager">
      
      
  <property name="sessionFactory">
      
      
    <ref local="mySessionFactory"/>
      
      
  </property>
      
      
  </bean>
      
      

    
    
     
      
    
    

可以看出:每个对象都可以在Spring 配置信息中用<bean>标签引用。在这里,mySessionFactory引用了HibernateSessionFactory,而myTransactionManager引用了HibernateTransactionManage  注意代码中myTransactionManger Bean有个sessionFactory属性。  HibernateTransactionManager有个sessionFactory setter getter方法,这是用来在Spring启动的时候实现“依赖注入” dependency injection)的。  sessionFactory 属性里 引用mySessionFactory。这两个对象在Spring容器初始化后就被组装了起来了。 这样的搭配让你从 单例(singleton objects)和工厂(factories)中解放了出来,降低了代码的维护代价。 mySessionFactory.的两个属性,分别是用来注入mappingResources hibernatePropertes的。通常,如果你在Spring之外使用Hibernate,这样的设置应该放在hibernate.cfg.xml中的。 不管怎样,Spring提供了一个便捷的方式-----Spring内部配置中并入了Hibernate的配置。 如果要得到更多的信息,可以查阅Spring API

 

 

既然我们已经组装配置好了Service Beans,就需要把Business Service Object DAO也组装起来,并把这些对象配到一个事务管理器(transaction manager)里。

 

Spring中的配置信息:

<!-- ORDER SERVICE -->
      
      
<bean id="orderService"
      
      
  class="org.
      
      
         springframework.
      
      
         transaction.
      
      
         interceptor.
      
      
         TransactionProxyFactoryBean">
      
      
  <property name="transactionManager">
      
      
    <ref local="myTransactionManager"/>
      
      
  </property>
      
      
  <property name="target">
      
      
    <ref local="orderTarget"/>
      
      
  </property>
      
      
  <property name="transactionAttributes">
      
      
    <props>
      
      
      <prop key="find*">
      
      
     PROPAGATION_REQUIRED,readOnly,-OrderException
      
      
      </prop>
      
      
      <prop key="save*">
      
      
     PROPAGATION_REQUIRED,-OrderException
      
      
      </prop>
      
      
    </props>
      
      
  </property>
      
      
</bean>
      
      

     
     
      
       
     
     
<!-- ORDER TARGET PRIMARY BUSINESS OBJECT:
      
      
Hibernate implementation -->
      
      
<bean id="orderTarget"
      
      
         class="com.
      
      
                meagle.
      
      
                service.
      
      
                spring.
      
      
                OrderServiceSpringImpl">
      
      
  <property name="orderDAO">
      
      
    <ref local="orderDAO"/>
      
      
  </property>
      
      
</bean>
      
      

     
     
      
       
     
     
<!-- ORDER DAO OBJECT -->
      
      
<bean id="orderDAO"
      
      
         class="com.
      
      
                meagle.
      
      
                service.
      
      
                dao.
      
      
                hibernate.
      
      
                OrderHibernateDAO">
      
      
  <property name="sessionFactory">
      
      
    <ref local="mySessionFactory"/>
      
      
  </property>
      
      
</bean>
     
     

 

 

4 是我们对象搭建的一个提纲。 从中可以看出,每个对象都联系着Spring,并且能通过Spring注入到其他对象。把它与Spring的配置文件比较,观察他们之间的关系

 


4. Spring就是这样基于配置文件,将各个Bean搭建在一起。

 

这个例子使用一个TransactionProxyFactoryBean,它定义了一个setTransactionManager() 这对象很有用,他能很方便的处理你申明的事物还有Service Object    你可以通过transactionAttributes属性来定义怎样处理。 想知道更多还是参考TransactionAttributeEditor吧。

TransactionProxyFactoryBean 还有个setter. 这会被我们 Business service objectorderTarget)引用, orderTarget定义了 业务服务层,并且它还有个属性,由setOrderDAO()引用。这个属性

 

Spring Bean 的还有一点要注意的: bean可以以用两种方式创造。 这些都在单例模式(Sington)和原型模式(propotype)中定义了。  默认的方式是singleton,这意味着共享的实例将被束缚。 而原形模式是在Spring用到bean的时候允许新建实例的。当每个用户需要得到他们自己Bean的Copy时,你应该仅使用prototype模式。(更多的请参考设计模式中的单例模式和原形模式)

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值