??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲天堂影视av,最全影音av资源中文字幕在线,在线视频您懂的http://www.aygfsteel.com/zhanglijun33/category/17946.htmlhQ彷徨,立志Q蓄?..zh-cnFri, 02 Mar 2007 03:10:01 GMTFri, 02 Mar 2007 03:10:01 GMT60spring 实践Q进一步理解和使用aophttp://www.aygfsteel.com/zhanglijun33/archive/2006/07/27/aoptest.html无?/dc:creator>无?/author>Thu, 27 Jul 2006 09:04:00 GMThttp://www.aygfsteel.com/zhanglijun33/archive/2006/07/27/aoptest.htmlhttp://www.aygfsteel.com/zhanglijun33/comments/60383.htmlhttp://www.aygfsteel.com/zhanglijun33/archive/2006/07/27/aoptest.html#Feedback18http://www.aygfsteel.com/zhanglijun33/comments/commentRss/60383.htmlhttp://www.aygfsteel.com/zhanglijun33/services/trackbacks/60383.htmlaop是面向切面编E的Q由此首先应该弄清的是:什么是切面Q?br />切面是切入点和通知的结合体?br />怎样l织一个切面?换句话说怎么把众多的cȝl成一个切面?p看我们在哪些cȝ代理cM插入相同的通知了。过多的例子不再举了Q如果谁惌一份testAOP工程实例Q可以给我留a?br />本程序说明:
tom是公司的一位经理managerQpojoQ?br />׃事务J忙Q他聘用了一个秘书secretaryQ通知Q,
每当l理上班的时候,U书M把一天的计划自动的提前交l经理ƈ作口水状?br />而对于别人,她的态度׃是那么好了?br />在这个程序中Q我们的U书对经理说话的时候用的是前置通知?br />Ҏ通工话的时候用的是后置通知?br />点一下运行看看程序的l果吧?

]]>
SpringFramework中的AOP单? http://www.aygfsteel.com/zhanglijun33/archive/2006/07/25/aop.html无?/dc:creator>无?/author>Tue, 25 Jul 2006 03:38:00 GMThttp://www.aygfsteel.com/zhanglijun33/archive/2006/07/25/aop.htmlhttp://www.aygfsteel.com/zhanglijun33/comments/59957.htmlhttp://www.aygfsteel.com/zhanglijun33/archive/2006/07/25/aop.html#Feedback1http://www.aygfsteel.com/zhanglijun33/comments/commentRss/59957.htmlhttp://www.aygfsteel.com/zhanglijun33/services/trackbacks/59957.html
SpringFramework中的AOP单?
AOP作ؓSpringq个轻量U的容器中很重要的一部分Q得到越来越多的xQSpring的Transaction是用AOP来管理的Q今天就通过单的例子来看看Spring中的AOP的基本用方法?

  首先定要Proxy的目标,在Spring中默认采用JDK中的dynamic proxyQ它只能够实现接口的代理Q如果想对类q行代理的话Q需要采用CGLIB的proxy。显Ӟ选择“编E到接口”是更明智的做法Q下面是要代理的接口:

  public interface FooInterface {
    public void printFoo();
    public void dummyFoo();
  }

 
  以及其一个简单的实现Q?br /> 
  public class FooImpl implements FooInterface {
    public void printFoo() {
      System.out.println("In FooImpl.printFoo");
    }
    public void dummyFoo() {
      System.out.println("In FooImpl.dummyFoo");
    }
  }

 
  接下来创Z个AdviceQ在Spring中支持Around,Before,After returning和Throws四种AdviceQ这里就以简单的Before Advice举例Q?br /> 
  public class PrintBeforeAdvice implements MethodBeforeAdvice {
    public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable {
      System.out.println("In PrintBeforeAdvice");
    }
  }
 
  有了自己的business interface和adviceQ剩下的是如何去装配它们了Q首先利用ProxyFactory以编E方式实玎ͼ如下Q?br /> 
  public class AopTestMain {
    public static void main(String[] args) {
      FooImpl fooImpl = new FooImpl();
      PrintBeforeAdvice myAdvice = new PrintBeforeAdvice();
     
      ProxyFactory factory = new ProxyFactory(fooImpl);
      factory.addBeforeAdvice(myAdvice);
      FooInterface myInterface = (FooInterface)factory.getProxy();

      myInterface.printFoo();
      myInterface.dummyFoo();
    }
  }
 
  现在执行E序Q神奇的l果出CQ?br /> 
  In PrintBeforeAdvice
  In FooImpl.printFoo
  In PrintBeforeAdvice
  In FooImpl.dummyFoo

 
  虽然q样能体会到Spring中AOP的用法,但这决不是值得推荐的方法,既然使用了SpringQ在ApplicationContext中装配所需?的bean才是最佳策略,实现上面的功能只需要写个简单的applicationContext可以了Q如下:
 
  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
    "
http://www.springframework.org/dtd/spring-beans.dtd">

  <beans>
    <description>The aop application context</description>
    <bean id="fooTarget" class="FooImpl"/>
    <bean id="myAdvice" class="PrintBeforeAdvice"/>
    <bean id="foo" class="org.springframework.aop.framework.ProxyFactoryBean">
     <property name="proxyInterfaces">
       <value>FooInterface</value>
     </property>
     <property name="target">
       <ref local="fooTarget"/>
     </property>
     <property name="interceptorNames">
       <list>
         <value>myAdvice</value>
       </list>
     </property>
    </bean>
  </beans>

  当然Qmain中的代码也要q行相应的修改:
    
  public static void main(String[] args) {
    ClassPathXmlApplicationContext context = new 
             ClassPathXmlApplicationContext("applicationContext.xml");
    FooInterface foo = (FooInterface)context.getBean("foo");
    foo.printFoo();
    foo.dummyFoo();
  }

 
  现在q行一下,l果和上面的运行结果完全一Pq样是不是更优雅Q当需要更改实现时Q只需要修攚w|文件就可以了,E序中的代码不需M改动?br /> 
  但是Q这时候会发现被proxy的object中的所有方法调用时都将q行advice中的beforeQ这昄不能满l大多数情况下的需要,此时Q只 需借用Advisor可以了Q当然要在Advisor中利用pattern讄好哪些方法需要adviceQ更改applicationContext 如下Q?br /> 
  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
    "
http://www.springframework.org/dtd/spring-beans.dtd">

  <beans>
    <description>The springeva application context</description>
    <bean id="fooTarget" class="FooImpl"/>
    <bean id="printBeforeAdvice" class="PrintBeforeAdvice"/>
    <bean id="myAdvisor"
          class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
      <property name="advice">
        <ref local="printBeforeAdvice"/>
      </property>
      <property name="pattern">
        <value>.*print.*</value>
      </property>
    </bean>
    <bean id="foo" class="org.springframework.aop.framework.ProxyFactoryBean">
      <property name="proxyInterfaces">
        <value>FooInterface</value>
      </property>
      <property name="target">
        <ref local="fooTarget"/>
      </property>
      <property name="interceptorNames">
        <list>
          <value>myAdvisor</value>
        </list>
      </property>
    </bean>
  </beans>

  ȝ序不需q行M修改Q运行结果已l变样了Q?/p>

  In PrintBeforeAdvice
  In FooImpl.printFoo
  In FooImpl.dummyFoo

 
  xQ应该已l理解了Spring中AOP的用方法,当然Spring中AOP最重要的应用是Transaction ManagerQD个这斚w的applicationContext例子看看Q?br /> 
  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "spring-beans.dtd">

  <beans>
    <bean id="propertyConfigurer"   
         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
      <property name="location">
        <value>/WEB-INF/jdbc.properties</value>
      </property>
    </bean>
    <bean id="dataSource"
          class="org.springframework.jdbc.datasource.DriverManagerDataSource">
      <property name="driverClassName">
        <value>${jdbc.driverClassName}</value>
      </property>
      <property name="url">
        <value>${jdbc.url}</value>
      </property>
      <property name="username">
        <value>${jdbc.username}</value>
      </property>
      <property name="password">
        <value>${jdbc.password}</value>
      </property>
    </bean>
    <bean id="sessionFactory"
          class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
      <property name="dataSource">
        <ref local="dataSource"/>
      </property>
      <property name="mappingResources">
        <value>smartmenu.hbm.xml</value>
      </property>
      <property name="hibernateProperties">
        <props>
          <prop key="hibernate.dialect">${hibernate.dialect}</prop>
        </props>
      </property>
    </bean>
 
    <bean id="transactionManager"       
          class="org.springframework.orm.hibernate.HibernateTransactionManager">
      <property name="sessionFactory">
        <ref local="sessionFactory"/>
      </property>
    </bean>
    <bean id="smartmenuTarget" class="SmartMenuHibernate">
      <property name="sessionFactory">
        <ref local="sessionFactory"/>
      </property>
    </bean>
    <bean id="smartMenu"
        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
      <property name="transactionManager">
        <ref local="transactionManager"/>
      </property>
      <property name="target">
        <ref local="smartmenuTarget"/>
      </property>
      <property name="transactionAttributes">
        <props>
          <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
          <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
        </props>
      </property>
    </bean>
  </beans>

 
  要想d理解Spring的AOPQ最好还是多看看源码Q开源就是好啊!



]]>
Hibernate+Spring 对DAO的处理实?http://www.aygfsteel.com/zhanglijun33/archive/2006/07/25/goodacticle.html无?/dc:creator>无?/author>Tue, 25 Jul 2006 03:23:00 GMThttp://www.aygfsteel.com/zhanglijun33/archive/2006/07/25/goodacticle.htmlhttp://www.aygfsteel.com/zhanglijun33/comments/59954.htmlhttp://www.aygfsteel.com/zhanglijun33/archive/2006/07/25/goodacticle.html#Feedback0http://www.aygfsteel.com/zhanglijun33/comments/commentRss/59954.htmlhttp://www.aygfsteel.com/zhanglijun33/services/trackbacks/59954.html
 
引用"Spring"手册上的话说: Hibernate+Spring昄是天生的l合.

下面是我用spring处理的一个HibernateDAO实例,可以看到,代码量大大减了.

java代码: 


package infoweb.dao;

import java.util.List;
import java.util.Iterator;

import infoweb.pojo.Info;


import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Query;
import net.sf.hibernate.Session;

import org.springframework.orm.hibernate.HibernateCallback;
import org.springframework.orm.hibernate.support.HibernateDaoSupport;


/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author D|?br />* @version 1.0
*/


publicclass InfoDAOImpl extends HibernateDaoSupport implements IInfoDAO {
  /**
   * 构造函?br />   */

  public InfoDAOImpl(){
    super();
  }


  /**
   * 增加记录
   * @param info Info
   */

  publicvoid setInfo(Info info)throwsException{
    getHibernateTemplate().save(info);
  }


  /**
   * 通过ID取得记录
   * @param id String
   * @return Info
   */

  public Info getInfoById(String id)throwsException{
    Info info = (Info) getHibernateTemplate().load(Info.class, id);
    return info;
  }


  /**
   * 修改记录
   * @param Info info
   */

  publicvoid modifyInfo(Info info)throwsException{
    getHibernateTemplate().update(info);
  }


  /**
   * 删除记录
   * @param Info info
   */

  publicvoid removeInfo(Info info)throwsException{
    getHibernateTemplate().delete(info);
  }


  ////////////////////////////////////////////////////////
  /////                                                ///
  /////以下部䆾不带审核功能                              ///
  /////                                                ///
  ////////////////////////////////////////////////////////

  /**
   * 取记录L
   * @return int
   */

  publicint getInfosCount()throwsException{
    int count = 0;
    String queryString = "select count(*) from Info";
    count = ((Integer) getHibernateTemplate().iterate(queryString).next()).
            intValue();
    return count;
  }


  /**
   * 取所有记录集?br />   * @return Iterator
   */

  publicIterator getAllInfos()throwsException{
    Iterator iterator = null;
    String queryString = " select info from Info as info order by info.id desc";
    List list = getHibernateTemplate().find(queryString);
    iterator = list.iterator();
    return iterator;
  }


  /**
   * 取记录集?br />   * @return Iterator
   * @param int position, int length
   */

  publicIterator getInfos(int position, int length)throwsException{
    Iterator iterator = null;
    String queryString = " select info from Info as info order by info.id desc";
    Query query = getHibernateTemplate().createQuery(getSession(), queryString);
    //讄游标的v始点
    query.setFirstResult(position);
    //讄游标的长?/span>
    query.setMaxResults(length);
    //记录生成
    List list = query.list();
    //把查询到的结果放入P代器
    iterator = list.iterator();
    return iterator;
  }


  /**
   * 取第一条记?br />   * @throws Exception
   * @return Station
   */

  public Info getFirstInfo()throwsException{
    Iterator iterator = null;
    Info info = null;
    String queryString = "select info from Info as info order by info.id desc";
    Query query = getHibernateTemplate().createQuery(getSession(), queryString);
    //记录生成
    List list = query.list();
    //把查询到的结果放入P代器
    iterator = list.iterator();
    if(iterator.hasNext()){
      info = (Info) iterator.next();
    }
    return info;
  }


  /**
   * 取最后一条记?br />   * @throws Exception
   * @return Station
   */

  public Info getLastInfo()throwsException{
    Iterator iterator = null;
    Info info = null;
    String queryString = "select info from Info as info order by info.id asc";
    Query query = getHibernateTemplate().createQuery(getSession(), queryString);
    //记录生成
    List list = query.list();
    //把查询到的结果放入P代器
    iterator = list.iterator();
    if(iterator.hasNext()){
      info = (Info) iterator.next();
    }
    return info;

  }


  ////////////////////////////////////////////////////////
  /////                                                ///
  ///// 以下部䆾表中要有特定字段才能Õ吩诵袪 牳鋈撕推W禒    ///
  /////                                                ///
  ////////////////////////////////////////////////////////

  /**
   * 取符合条件记录L, [表中要有 isperson 字段]
   * @return int
   * @param int isPerson
   */


  publicint getInfosCountByIsperson(int isPerson)throwsException{
    int count = 0;
    String queryString =
        "select count(*) from Info as info where info.isperson =" + isPerson;
    count = ((Integer) getHibernateTemplate().iterate(queryString).next()).
            intValue();
    return count;
  }


  /**
   * 取所有符合条件记录集? 模糊查询条g.[表中要有 isperson 字段]
   * @return Iterator
   * @param int isPerson
   */


  publicIterator getAllInfosByIsperson(int isPerson)throwsException{
    Iterator iterator = null;
    String queryString = " select info from Info as info where info.isperson =" +
                         isPerson + " order by info.id desc";
    List list = getHibernateTemplate().find(queryString);
    //把查询到的结果放入P代器
    iterator = list.iterator();
    return iterator;
  }


  /**
   * 取符合条件记录集? 模糊查询条g.[表中要有 isperson 字段]
   * @return Iterator
   * @param int isPerson,int position, int length
   */


  publicIterator getInfosByIsperson(int isPerson, int position, int length)throws
      Exception{
    Iterator iterator = null;
    String queryString = " select info from Info as info where info.isperson =" +
                         isPerson + " order by info.id desc";
    //创徏查询
    Query query = getHibernateTemplate().createQuery(getSession(), queryString);
    //讄游标的v始点
    query.setFirstResult(position);
    //讄游标的长?/span>
    query.setMaxResults(length);
    //记录生成
    List list = query.list();
    //把查询到的结果放入P代器
    iterator = list.iterator();
    return iterator;
  }


  ////////////////////////////////////////////////////////
  /////                                                ///
  ///// 以下部䆾表中要有特定字段才能Õ吩诵袪  查询部䆾      ///
  /////                                                ///
  ///////////////////////////////////////////////////////
  /**
   * 取符合条件记录L, 模糊查询条g.[表中要有 title 字段]
   * @return int
   * @param String text
   */

  publicint getInfosCount(String text)throwsException{
    int count = 0;
    count = ((Integer) getHibernateTemplate().iterate(
        "select count(*) from Info as info where info.title like '%" + text +
        "%'
").next()).intValue();
    return count;
  }


  /**
   * 取所有符合条件记录集? 模糊查询条g.[表中要有 title 字段]
   * @return Iterator
   * @param String text
   */


  publicIterator getAllInfos(String text)throwsException{
    Iterator iterator = null;
    String queryString =
        " select info from Info as info where info.title like '%" + text +
        "%'
order by info.id desc";
    //创徏查询
    Query query = getHibernateTemplate().createQuery(getSession(), queryString);
    //记录生成
    List list = query.list();
    //把查询到的结果放入P代器
    iterator = list.iterator();
    return iterator;
  }


  /**
   * 取符合条件记录集? 模糊查询条g.[表中要有 title 字段]
   * @return Iterator
   * @param String text,int position, int length
   */

  publicIterator getInfos(String text, int position, int length)throws
      Exception{
    Iterator iterator = null;
    String queryString =
        " select info from Info as info where info.title like '%" + text +
        "%'
order by info.id desc";

    //创徏查询
    Query query = getHibernateTemplate().createQuery(getSession(), queryString);
    //讄游标的v始点
    query.setFirstResult(position);
    //讄游标的长?/span>
    query.setMaxResults(length);
    //记录生成
    List list = query.list();
    //把查询到的结果放入P代器
    iterator = list.iterator();
    return iterator;
  }


  ////////////////////////////////////////////////////////
  /////                                                ///
  ///// 以下部䆾表中要有特定字段才能Õ吩诵袪 犠⒉嵯喙?    ///
  /////                                                ///
  ////////////////////////////////////////////////////////

  /**
   * 取符合条件记录L.[ 表中要有 registername 字段]
   * @return int
   * @param String text
   */

  publicint getInfosCountByRegisterName(String registerName)throwsException{
    int count = 0;
    count = ((Integer) getHibernateTemplate().iterate(
        "select count(*) from Info as info where info.registername = '" +
        registerName + "'
").next()).intValue();
    return count;
  }


  /**
   * 通过注册名取得一条记?如有多条,只取W一?[表中要有 registername字段]
   * @param registername String
   * @return Info
   */

  public Info getInfoByRegisterName(String registerName)throwsException{
    Iterator iterator = null;
    Info info = null;
    String queryString =
        " select info from Info as info where info.registername='" +
        registerName + "'
order by info.id desc";
    //创徏查询
    Query query = getHibernateTemplate().createQuery(getSession(), queryString);
    //记录生成
    List list = query.list();
    //把查询到的结果放入P代器
    iterator = list.iterator();
    if(iterator.hasNext()){
      info = (Info) iterator.next();
    }
    return info;
  }


  /**
   * 通过注册名取得所有记录集?[表中要有 registername字段]
   * @param registername String
   * @return Iterator
   */

  publicIterator getAllInfosByRegisterName(String registerName)throws
      Exception{
    Iterator iterator = null;
    String queryString =
        " select info from Info as info where info.registername='" +
        registerName + "'
order by info.id desc";
    //创徏查询
    Query query = getHibernateTemplate().createQuery(getSession(), queryString);
    //记录生成
    List list = query.list();
    //把查询到的结果放入P代器
    iterator = list.iterator();
    return iterator;
  }


  /**
   * 通过注册名取得记录列?[表中要有 registername字段]
   * @param registername String
   * @return Iterator
   */

  publicIterator getInfosByRegisterName(String registerName, int position,
                                         int length)throwsException{
    Iterator iterator = null;
    String queryString =
        " select info from Info as info where info.registername='" +
        registerName + "'
order by info.id desc";
    //创徏查询
    Query query = getHibernateTemplate().createQuery(getSession(), queryString);
    //讄游标的v始点
    query.setFirstResult(position);
    //讄游标的长?/span>
    query.setMaxResults(length);
    //记录生成
    List list = query.list();
    //把查询到的结果放入P代器
    iterator = list.iterator();
    return iterator;
  }


  ////////////////////////////////////////////////////////
  /////                                                ///
  ///// 以下部䆾表中要有特定字段才能Õ吩诵袪   犑餍桶婵?   ///
  /////                                                ///
  ////////////////////////////////////////////////////////

  /**
   * 取记录L.[ 表中要有 board_id 字段]
   * @return int
   * @param String boardId
   */

  publicint getInfosCountByBoard(String boardId)throwsException{
    int count = 0;

    count = ((Integer) getHibernateTemplate().iterate(
        "select count(*) from Info as info where info.boardId = '" + boardId +
        "'
").next()).intValue();

    return count;
  }


  /**
   * 通过版块名取得所有记录集?[表中要有 board_id字段]
   * @param BoardId String
   * @return Iterator
   */

  publicIterator getAllInfosByBoard(String boardId)throwsException{
    Iterator iterator = null;
    String queryString = " select info from Info as info where info.boardId='" +
                         boardId + "'
order by info.id desc";
    //创徏查询
    Query query = getHibernateTemplate().createQuery(getSession(), queryString);
    //记录生成
    List list = query.list();
    //把查询到的结果放入P代器
    iterator = list.iterator();
    return iterator;
  }


  /**
   * 通过版块名取得记录列?[表中要有 board_id字段]
   * @param BoardId String
   * @return Iterator
   */

  publicIterator getInfosByBoard(String boardId, int position, int length)throws
      Exception{
    Iterator iterator = null;
    String queryString = " select info from Info as info where info.boardId='" +
                         boardId + "'
order by info.id desc";

    //创徏查询
    Query query = getHibernateTemplate().createQuery(getSession(), queryString);
    //讄游标的v始点
    query.setFirstResult(position);
    //讄游标的长?/span>
    query.setMaxResults(length);
    //记录生成
    List list = query.list();
    //把查询到的结果放入P代器
    iterator = list.iterator();

    return iterator;

  }


  /**
   * 取符合条件记录L.[ 表中要有 board_id 字段,title]  模糊查询title
   * @return int
   * @param String boardId ,String text
   */

  publicint getInfosCountByBoard(String boardId, String text)throwsException{
    int count = 0;

    count = ((Integer) getHibernateTemplate().iterate(
        "select count(*) from Info as info where info.boardId='" + boardId +
        "'
and info.title like '%" + text + "%'").next()).intValue();

    return count;

  }


  /**
   * 通过版块名取得记录列?[表中要有 board_id字段]  模糊查询title
   * @param String boardID,int position, int length
   * @return Iterator
   */

  publicIterator getInfosByBoard(String boardId, int position, int length,
                                  String text)throwsException{
    Iterator iterator = null;
    String queryString = " select info from Info as info where info.boardId='" +
                         boardId + "'
and info.title like '%" + text +
                         "%'
order by info.id desc";

    //创徏查询
    Query query = getHibernateTemplate().createQuery(getSession(), queryString);
    //讄游标的v始点
    query.setFirstResult(position);
    //讄游标的长?/span>
    query.setMaxResults(length);
    //记录生成
    List list = query.list();
    //把查询到的结果放入P代器
    iterator = list.iterator();
    return iterator;

  }


  ////////////////////////////////////////////////////////
  /////                                                ///
  /////以下部䆾带有审核功能                              ///
  /////                                                ///
  ////////////////////////////////////////////////////////

  /**
   * 取记录L
   * @return int
   * @param int isAuditing
   */

  publicint getInfosCount(int isAuditing)throwsException{
   


]]>
spring,hibernate,struts应用中的错误及更?Q?Q?/title><link>http://www.aygfsteel.com/zhanglijun33/archive/2006/07/11/STRUTS3.html</link><dc:creator>无?/dc:creator><author>无?/author><pubDate>Tue, 11 Jul 2006 07:10:00 GMT</pubDate><guid>http://www.aygfsteel.com/zhanglijun33/archive/2006/07/11/STRUTS3.html</guid><wfw:comment>http://www.aygfsteel.com/zhanglijun33/comments/57650.html</wfw:comment><comments>http://www.aygfsteel.com/zhanglijun33/archive/2006/07/11/STRUTS3.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zhanglijun33/comments/commentRss/57650.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zhanglijun33/services/trackbacks/57650.html</trackback:ping><description><![CDATA[q两天公怓Q务不紧,q样q我不做试验的机会和旉。今天的试验是在action里面写多个不同的ҎQƈ且要?C务层的对象以便进一步处理数据?br />首先我的action要承DispatchAction.q样才能实现多个不同的方法放在一个action里?br />2.在里面写入固定的ҎQ?br />public void setServlet(ActionServlet actionServlet){<br />   super.setServlet(actionServlet);<br />   ServletContext  servletContext =actionServlet.getServletContext();<br />  WebApplicationContext wac =  WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);<br />//然后可以得C务层的对象了。像我昨天说得那样做p。(注:在这个方法里面可以得到多个不同对象,已经试验通过Q?br />然后再一个得到service对象的方法,以供后面的方法用?br />3.多个jsp面可以对应一个action吗?可以Q已l试验通过。ƈ且在struts_config.xml里面无须做Q何改动?br />4.myAction?method=addXX后面可以跟其他参数吗Q可以,已经试验通过?br />5Qjsp向action发出h的时候,Z么有时候出现空白异常?q时候你应该从两个方面进行检?br />  1Q检查你的struts_config.xml forwordname<br />   2以上l验是我苦想了一天才得到的?img src ="http://www.aygfsteel.com/zhanglijun33/aggbug/57650.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zhanglijun33/" target="_blank">无?/a> 2006-07-11 15:10 <a href="http://www.aygfsteel.com/zhanglijun33/archive/2006/07/11/STRUTS3.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts,hibernate,spring应用q程中的错误及更正(每日更新Q?/title><link>http://www.aygfsteel.com/zhanglijun33/archive/2006/07/10/zongjie.html</link><dc:creator>无?/dc:creator><author>无?/author><pubDate>Mon, 10 Jul 2006 08:22:00 GMT</pubDate><guid>http://www.aygfsteel.com/zhanglijun33/archive/2006/07/10/zongjie.html</guid><wfw:comment>http://www.aygfsteel.com/zhanglijun33/comments/57522.html</wfw:comment><comments>http://www.aygfsteel.com/zhanglijun33/archive/2006/07/10/zongjie.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zhanglijun33/comments/commentRss/57522.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zhanglijun33/services/trackbacks/57522.html</trackback:ping><description><![CDATA[上接“jsp面得到业务层的对象?br />1.我现在想用org.springframework.orm.hibernate.HibernateTransactionManager来给业务对象l入事务理Ҏ。但在调试的时候却发生了异?Error registering bean with name 'myTransactionManager' defined in ServletContext resource [/WEB-INF/applicationContext.xml],pȝ在给myTransactionManager Bean注册的时候却找不到它的类。的是很奇怪的问题QHibernateTransactionManager明明在q儿摆着嘛,怎么pȝ是找不到呢。经q几个小时的查找代码案Q发现原来我用的是Hibernate3版本。相应的org.springframework.orm.hibernate.HibernateTransactionManager也应该改成:org.springframework.orm.hibernate3.HibernateTransactionManager.汗!javaE序员真累?br />2.错误2Q当我想在页面上得到l入事务理的service对象Ӟ又有一个错误来了:<br />org.apache.jasper.JasperException: $Proxy2<br />org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372)<br />晕吧Q代理h的待遇没问题了,可是它就是不l你做代理。经q在jsp面上的排察Q终于找到这一句:<br />   RealnewsService newsservice=(RealnewsService)wac.getBean("newsService");<br />它有什么问题吗Q初学者看不出什么错误来Q因法上一炚w也没有,后来l高手指Ҏ如梦初醒Q?br />它的声明cd应该是相应的接口。这是spring一贯的风格Q(但这至于让我出错吗?郁闷Q,好。到今天为址Q我和关注我的博客的同学应该对spring应用E序的核心配|文件有了一定的理解了?br />ȝ一句话Q解决问题的Ҏ是:来了问题不要怕,用朴素的理念和执著的态度L胜bug  ;-)<img src ="http://www.aygfsteel.com/zhanglijun33/aggbug/57522.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zhanglijun33/" target="_blank">无?/a> 2006-07-10 16:22 <a href="http://www.aygfsteel.com/zhanglijun33/archive/2006/07/10/zongjie.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring 应用E序配置文g的核心理?/title><link>http://www.aygfsteel.com/zhanglijun33/archive/2006/07/06/spring.html</link><dc:creator>无?/dc:creator><author>无?/author><pubDate>Thu, 06 Jul 2006 03:29:00 GMT</pubDate><guid>http://www.aygfsteel.com/zhanglijun33/archive/2006/07/06/spring.html</guid><wfw:comment>http://www.aygfsteel.com/zhanglijun33/comments/56923.html</wfw:comment><comments>http://www.aygfsteel.com/zhanglijun33/archive/2006/07/06/spring.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zhanglijun33/comments/commentRss/56923.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zhanglijun33/services/trackbacks/56923.html</trackback:ping><description><![CDATA[本文的理解来自实际应用程序。文件名是:applicationContext-hibernate1.xml<br />熟悉spring-hibernate架构的h对它肯定不陌生。它是由支持spring的组件在~程开始自动生成的Q但我们不能L停留在不不问的状态。否则对E序构造就没有更深一步的理解?br />如果理清applicationContext-hibernate1.xml的头l或者手工写它,对于d改进E序肯定是有益的?br />我ȝ出来的顺序是Q?br />1.建myDataSource<br />(org.apache.commons.dbcp.BasicDataSource).属性包括DBDriver,URL,UserName,Password.<br />2.mySessionFactory:<br />(org.springframework.orm.hibernate.LocalSessionFactoryBean)属性包括:mappingResources(hbm.xml的集?QHibernateProperties,myDataSource(注入1).<br />3.myTransactionManager<br />(org.springframework.orm.hibernate.HibernateTransactionManager)mySessionFactory(注入2)<br />以上三步是后面各w|的基础。从后面开始我们就开始真正的配置我们的Beans了?br />4.boDAO<br />(com.realnews.yourProject.service.dao.hibernate.boDAOs)注入mySessionFactory.<br />5.boTarget<br />(com.realnews.yourProject.service.spring.boServices) 注入boDAO<br />6.boService<br />Qorg.springframework.transaction.interceptor.TransactionProxyFactoryBeanQ注入myTransactionManager及boTarget<br />Qƈ用transactionAttributes讄数据库ƈ发控制别。例?br /><property name="transactionAttributes"><br />   <props><br />    <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop><br />    <prop key="save*">PROPAGATION_REQUIRED</prop><br />   </props><br />7.循环W?到第6步即可配|所有需要配|的bean.<br />本文不是摘抄Q如果想转摘Q请注明出处Q?a href="/zhanglijun33">www.aygfsteel.com/zhanglijun33</a><br />如果惌更详l的资料可以l我留言?br /><img src ="http://www.aygfsteel.com/zhanglijun33/aggbug/56923.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zhanglijun33/" target="_blank">无?/a> 2006-07-06 11:29 <a href="http://www.aygfsteel.com/zhanglijun33/archive/2006/07/06/spring.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring Framework之最佛_践二 http://www.aygfsteel.com/zhanglijun33/archive/2006/07/05/lijun.html无?/dc:creator>无?/author>Wed, 05 Jul 2006 08:38:00 GMThttp://www.aygfsteel.com/zhanglijun33/archive/2006/07/05/lijun.htmlhttp://www.aygfsteel.com/zhanglijun33/comments/56805.htmlhttp://www.aygfsteel.com/zhanglijun33/archive/2006/07/05/lijun.html#Feedback2http://www.aygfsteel.com/zhanglijun33/comments/commentRss/56805.htmlhttp://www.aygfsteel.com/zhanglijun33/services/trackbacks/56805.html

Spring Framework最得以出名的是与Hibernate的无~链接,基本上用SpringQ就会用Hibernate。可惜的是Spring提供的HibernateTemplate功能昑־不够Q用v来也不是很方ѝ我们编E序Ӟ一般先写BusinessServiceQ由BusinessService调DAO来执行存储,在这斚wSpring没有很好的例子,造成真正想用好它Qƈ不容易?/font>

我们的思\是先写一个BaseDaoQ仿照HibernateTemplateQ将基本功能全部实现Q?/font>

public class BaseDao extends HibernateDaoSupport{

    private Log log = LogFactory.getLog(getClass());

    public Session openSession() {
        return SessionFactoryUtils.getSession(getSessionFactory(), false);
    }

    public Object get(Class entityClass, Serializable id) throws DataAccessException {
        Session session = openSession();
        try {
            return session.get(entityClass, id);
        }
        catch (HibernateException ex) {
            throw SessionFactoryUtils.convertHibernateAccessException(ex);
        }
    }

    public Serializable create(Object entity) throws DataAccessException {
        Session session = openSession();
        try {
            return session.save(entity);
        }
        catch (HibernateException ex) {
            throw SessionFactoryUtils.convertHibernateAccessException(ex);
        }
    }

...

其它的DAOQ从BaseDaol承出来Q这样写其他的DAOQ代码就会很?/font>

从BaseDaol承出来EntityDaoQ专门负责一般实体的基本操作Q会更方ѝ?/font>

public interface EntityDao {

    public Object get(Class entityClass, Serializable id) throws DataAccessException;

    public Object load(Class entityClass, Serializable id) throws DataAccessException;

    public Serializable create(Object entity) throws DataAccessException;
...}

/**
 * Base class for Hibernate DAOs.  This class defines common CRUD methods for
 * child classes to inherit. User Sping AOP Inteceptor
 */
public class EntityDaoImpl extends BaseDao implements EntityDao{

}

ZTransaction的控Ӟ采用AOP的方式:

public interface EntityManager {

    public Object get(Class entityClass, Serializable id);

    public Object load(Class entityClass, Serializable id);

    public Serializable create(Object entity);
...

}

/**
 * Base class for Entity Service. User Sping AOP Inteceptor
 */
public class EntityManagerImpl implements EntityManager {

    private EntityDao entityDao;

    public void setEntityDao(EntityDao entityDao) {
        this.entityDao = entityDao;
    }

    public Object get(Class entityClass, Serializable id) {
        return entityDao.get(entityClass, id);
    }

    public Object load(Class entityClass, Serializable id) {
        return entityDao.load(entityClass, id);
    }
...

}

q样我们有了一个通用的Hibernate实体引擎Q可以对MHibernate实体实现基本的增加、修攏V删除、查询等?/font>

其它的BusinessService可以承EntityManagerQ快速实C务逻辑?/font>

具体XML配置如下Q?/font>

 <!-- Oracle JNDI DataSource for J2EE environments -->
 <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName"><value>java:comp/env/jdbc/testPool</value></property>
 </bean>

 <!-- Hibernate SessionFactory for Oracle -->
 <!-- Choose the dialect that matches your "dataSource" definition -->
 <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
  <property name="dataSource"><ref local="dataSource"/></property>
  <property name="mappingResources">
   <value>user-hbm.xml</value>
  </property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">net.sf.hibernate.dialect.OracleDialect</prop>
    <prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.Provider</prop>
    <prop key="hibernate.cache.use_query_cache">true</prop>
                  <prop key="hibernate.show_sql">false</prop>
   </props>
  </property>
 </bean>

 <!-- AOP DAO Intecepter -->
        <bean id="hibernateInterceptor" class="org.springframework.orm.hibernate.HibernateInterceptor">
          <property name="sessionFactory">
            <ref bean="sessionFactory"/>
          </property>
        </bean>

        <bean id="entityDaoTarget" class="com.gpower.services.entity.dao.EntityDaoImpl">
          <property name="sessionFactory">
            <ref bean="sessionFactory"/>
          </property>
        </bean>

        <bean id="entityDao" class="org.springframework.aop.framework.ProxyFactoryBean">
          <property name="proxyInterfaces">
            <value>com.gpower.services.entity.dao.EntityDao</value>
          </property>
          <property name="interceptorNames">
            <list>
              <value>hibernateInterceptor</value>
              <value>entityDaoTarget</value>
            </list>
          </property>
        </bean>

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

 <!-- Transaction manager that delegates to JTA (for a transactional JNDI DataSource) -->
 <!--
 <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"/>
 -->

 <!-- Transactional proxy for the Application primary business object -->
        <bean id="entityManagerTarget" class="com.gpower.services.entity.EntityManagerImpl">
          <property name="entityDao">
            <ref bean="entityDao"/>
          </property>
        </bean>

        <bean id="entityManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
          <property name="transactionManager">
            <ref bean="transactionManager"/>
          </property>
          <property name="target">
            <ref bean="entityManagerTarget"/>
          </property>
          <property name="transactionAttributes">
     <props>
       <prop key="get*">PROPAGATION_SUPPORTS</prop>
       <prop key="*">PROPAGATION_REQUIRED</prop>
     </props>
          </property>
        </bean>


Spring Framework之最佛_践二


]]>
վ֩ģ壺 | | ɽ| | Ϫ| Ϫ| | | | Ϫ| ʯ| | | մ| Ϊ| | | | | ͸| | ̩| | Ȫ| | | ʮ| ֲ| | Ȫ| | ¬| ɽ| غ| | | | »| | غ| |