??xml version="1.0" encoding="utf-8" standalone="yes"?>久久精品视频在线观看,亚洲热app,最新天堂资源在线资源http://www.aygfsteel.com/fengyun1801/zh-cnThu, 19 Jun 2025 22:50:04 GMTThu, 19 Jun 2025 22:50:04 GMT60Struts+Spring+Hibernatel装web应用http://www.aygfsteel.com/fengyun1801/archive/2007/01/11/93173.html付翔付翔Thu, 11 Jan 2007 07:02:00 GMThttp://www.aygfsteel.com/fengyun1801/archive/2007/01/11/93173.htmlhttp://www.aygfsteel.com/fengyun1801/comments/93173.htmlhttp://www.aygfsteel.com/fengyun1801/archive/2007/01/11/93173.html#Feedback0http://www.aygfsteel.com/fengyun1801/comments/commentRss/93173.htmlhttp://www.aygfsteel.com/fengyun1801/services/trackbacks/93173.html建立我们的业务服务对?br />
  我们在我们的业务对象中使用的setterҎ接受的是接口Q这些接口允许对象的松散定义的实玎ͼq些对象被讄或者注入。在我们q个例子里我们将使我们的业务服务对象接受一个DAOL制我们的领域对象的持久化。当我们在这文章的例子中用HibernateQ我们可以容易的转换C个不同的持久框架的实玎ͼ通知Spring使用新的实现的DAO对象。你能明白编E到接口和用“依赖注入”模式是怎样宽松耦合你的业务逻辑和你的持久化机制的?br />
  q儿是业务服务对象的接口Q它是一个DAO对象依赖的桩.
public interface IOrderService {
 public abstract Order saveNewOrder(Order order)
  throws OrderException,
      OrderMinimumAmountException;
 public abstract List findOrderByUser(String user)
              throws OrderException;
 public abstract Order findOrderById(int id)
              throws OrderException;
 public abstract void setOrderDAO(IOrderDAO orderDAO);
}

  注意上面的代码有一个ؓDAO对象准备的setterҎ。这儿没有一个getOrderDAOҎ因ؓ它不是必要的Q因Z太有从外面访问连着的OrderDAO对象的需要。DAO对象被用来和我们的持久层沟通。我们将用Spring把业务服务对象和DAO对象q在一赗因为我们编码到接口Q我们不会紧耦合实现?

  下一步是写我们的DAO实现对象。因为Spring有内建的对Hibernate的支持,q个例子DAO承HibernateDaoSupportc,q得我们容易取得一个到HibernateTemplatecȝ引用QHibernateTemplate是一个帮助类Q它能简化Hibernate Session的编码和处理HibernateExceptions。这儿是DAO的接口:

public interface IOrderDAO {
 public abstract Order findOrderById(final int id);
 public abstract List findOrdersPlaceByUser(final String placedBy);
 public abstract Order saveOrder(final Order order);
}

  我们q有两个对象要和我们的业务层q在一赗这包括HibernateSessionFactory和一个TransactionManager对象。这在Spring配置文g里直接完成。Spring提供一个HibernateTransactionManagerQ它从工厂l定一个Hibernate SessionC个线E来支持事务。这儿是HibernateSessionFactory和HibernateTransactionManager的Spring配置?

Qbean id="mySessionFactory"
    class="org.springframework.orm.hibernate.
       LocalSessionFactoryBean"Q?br /> Qproperty name="mappingResources"Q?
  QlistQ?
   QvalueQ?br />    com/meagle/bo/Order.hbm.xml
   Q?valueQ?br />   QvalueQ?br />    com/meagle/bo/OrderLineItem.hbm.xml
   Q?valueQ?br />  Q?listQ?br /> Q?propertyQ?br /> Qproperty name="hibernateProperties"Q?br />  QpropsQ?br />   Qprop key="hibernate.dialect"Q?br />    net.sf.hibernate.dialect.MySQLDialect
   Q?propQ?br />   Qprop key="hibernate.show_sql"Q?br />    false
   Q?propQ?br />   Qprop key="hibernate.proxool.xml"Q?br />    C:/MyWebApps/.../WEB-INF/proxool.xml
   Q?propQ?br />   Qprop key="hibernate.proxool.pool_alias"Q?br />     spring
   Q?propQ?br />  Q?propsQ?br /> Q?propertyQ?br />Q?beanQ?br />Q?-- Transaction manager for a single Hibernate
SessionFactory (alternative to JTA) --Q?br />Qbean id="myTransactionManager"
     class="org.
         springframework.
        orm.
        hibernate.
        HibernateTransactionManager"Q?br /> Qproperty name="sessionFactory"Q?br />  Qref local="mySessionFactory"/Q?br /> Q?propertyQ?br /> Q?beanQ?

  每一个对象能被Spring配置里的一个<beanQ标记引用。在q个例子里,bean “mySessionFactory”代表一个HibernateSessionFactoryQbean “myTransactionManager”代表一个Hibernate transaction manager。注意transactionManger bean有一个叫作sessionFactory的属性元素。HibernateTransactionManager有一个ؓsessionFactory准备的setter和getterҎQ它们是用来当Spring容器启动时的依赖注入。sessionFactory属性引用mySessionFactory bean。这两个对象现在当Spring容器初始化时被q在一赗这U连接把你从为引用和创徏q些对象而创建singleton对象和工厂中解放出来Q这减少了你应用E序中的代码l护。mySessionFactory bean有两个属性元?它们译成ؓmappingResources ?hibernatePropertes准备的setterҎ。通常Q如果你在Spring之外使用Hibernate,q个配置被保存在hibernate.cfg.xml文g中。不怎样,Spring提供了一个便L方式--在Spring配置文g中合qHibernate的配|?

  既然我们已经配置了我们的容器服务beans和把它们q在了一P我们需要把我们的业务服务对象和我们的DAO对象q在一赗然后,我们需要把q些对象q接C务管理器?br />
  q是在Spring配置文g里的样子Q?br />
Q?-- ORDER SERVICE --Q?
Qbean id="orderService"
 class="org.
     springframework.
     transaction.
     interceptor.
     TransactionProxyFactoryBean"Q?br /> Qproperty name="transactionManager"Q?br />  Qref local="myTransactionManager"/Q?br /> Q?propertyQ?br /> Qproperty name="target"Q?br />  Qref local="orderTarget"/Q?br /> Q?propertyQ?br /> Qproperty name="transactionAttributes"Q?br />  QpropsQ?br />   Qprop key="find*"Q?br />  PROPAGATION_REQUIRED,readOnly,-OrderException
   Q?propQ?br />   Qprop key="save*"Q?br />  PROPAGATION_REQUIRED,-OrderException
   Q?propQ?br />  Q?propsQ?br /> Q?propertyQ?br />Q?beanQ?br />Q?-- ORDER TARGET PRIMARY BUSINESS OBJECT:
Hibernate implementation --Q?br />Qbean id="orderTarget"
     class="com.
        meagle.
        service.
        spring.
        OrderServiceSpringImpl"Q?br /> Qproperty name="orderDAO"Q?br />  Qref local="orderDAO"/Q?br /> Q?propertyQ?br />Q?beanQ?br />Q?-- ORDER DAO OBJECT --Q?br />Qbean id="orderDAO"
     class="com.
        meagle.
        service.
        dao.
        hibernate.
        OrderHibernateDAO"Q?br /> Qproperty name="sessionFactory"Q?br />  Qref local="mySessionFactory"/Q?br /> Q?propertyQ?br />Q?beanQ?

  ?是我们已l连在一L东西的一个概览。它展示了每个对象是怎样相关联的和怎样被Spring讄q其它对象中。把q幅囑֒CZ应用中的Spring配置文gҎ查看它们之间的关pR?


?Q这是Spring怎样在q个配置的基上装配beans?br />
  q个例子使用一个TransactionProxyFactoryBeanQ它有一个ؓ我们已经定义了的事务理者准备的setterҎ。这是一个有用的对象Q它知道怎样处理声明的事务操作和你的服务对象。你可以通过transactionAttributes属性定义事务怎样被处理,transactionAttributes属性ؓҎ名定义模式和它们怎样参与q一个事务?br />
  TransactionProxyFactoryBeancM有一个ؓ一个target准备的setter,target是一个到我们的叫作orderTarget的业务服务对象的引用?orderTarget bean定义使用哪个业务服务对象q有一个指向setOrderDAO()的属性。orderDAO bean居于这个属性中QorderDAO bean是我们的和持久层交流的DAO对象?br />
  q有一个关于Spring和bean要注意的是bean能以两种模式工作。这两种模式被定义ؓsingleton和prototype。一个bean默认的模式是singletonQ意味着一个共享的bean的实例将被管理。这是用于无状态操?-像一个无状态会话bean提供的那样。当bean由Spring提供Ӟprototype模式允许创徏bean的新实例。你应当只有在每一个用户都需要他们自qbean的拷贝时才用prototype模式?br />

付翔 2007-01-11 15:02 发表评论
]]>
վ֩ģ壺 | Ԫ| Ž| | | | ƽ| ӱ| | | | | | | | ϴ| °Ͷ| ų| | ع| ʡ| | °Ͷ| ³| | | Ǩ| | | տ| | | Ӷ| | β| ͬ| γ| | | ٽ| ̨|