??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品中文在线,黄网站免费久久,国产一级片在线http://www.aygfsteel.com/jinfeng_wang/category/480.htmlG-G-S,D-D-U!zh-cnThu, 20 Mar 2008 10:19:20 GMTThu, 20 Mar 2008 10:19:20 GMT60XDoclet的build.xml写法 zzhttp://www.aygfsteel.com/jinfeng_wang/archive/2008/03/20/187409.htmljinfeng_wangjinfeng_wangThu, 20 Mar 2008 01:52:00 GMThttp://www.aygfsteel.com/jinfeng_wang/archive/2008/03/20/187409.htmlhttp://www.aygfsteel.com/jinfeng_wang/comments/187409.htmlhttp://www.aygfsteel.com/jinfeng_wang/archive/2008/03/20/187409.html#Feedback0http://www.aygfsteel.com/jinfeng_wang/comments/commentRss/187409.htmlhttp://www.aygfsteel.com/jinfeng_wang/services/trackbacks/187409.html

 XDoclet的build.xml写法


  1. <?xml version="1.0" encoding="utf-8"?>
  2. <project name="appgen" default="web-demo" basedir=".">
  3.  
  4. <property file="build.properties" />
  5.  
  6. <path id="xdoclet.classpath">
  7. <fileset dir="${lib}">
  8. <include name="**/*.jar" />
  9. </fileset>
  10. <path location="${classes}" />
  11. </path>
  12.  
  13. <target name="clean">
  14. <delete>
  15. <fileset dir="${gen}">
  16. <include name="*.xml" />
  17. </fileset>
  18. </delete>
  19. </target>
  20.  
  21. <!-- q个target可以生成Qstrutsconfigxml , strutsvalidationxml ,web.xml-->
  22.  
  23. <target name="web-demo" depends="clean,Spring-service-beans,Spring-action-beans,Spring-dao-beans">
  24. <taskdef name="webdoclet" classname="xdoclet.modules.web.WebDocletTask" classpathref="xdoclet.classpath" />
  25. <webdoclet destDir="${gen}" mergeDir="${merge}" force="false">
  26. <fileset dir="${src}">
  27. <include name="**/*Action.java" />
  28. <include name="**/*Form.java" />
  29. </fileset>
  30.  
  31. <strutsconfigxml Version="1.2" destDir="${gen}" validateXML="true"/>
  32. <strutsvalidationxml destDir="${gen}" />
  33. <deploymentdescriptor Servletspec="2.4" destDir="${gen}" />
  34.  
  35. </webdoclet>
  36. </target>
  37.  
  38. <target name="ReplaceConfigFile" depends="web-demo">
  39. <copy todir="${webinf}">
  40. <fileset dir="${gen}">
  41. <include name="struts-config.xml"/>
  42. <include name="validation.xml"/>
  43. <include name="action-beans.xml"/>
  44. <include name="dao-beans.xml"/>
  45. <include name="service-beans.xml"/>
  46. </fileset>
  47. </copy>
  48. </target>
  49. <!-- 生成spring的xml文g -->
  50. <target name="Spring-service-beans" description="Spring-application-beans">
  51. <taskdef name="springdoclet" classname="xdoclet.modules.spring.SpringDocletTask" classpathref="xdoclet.classpath" />
  52. <springdoclet excludedTags="@version,@author,@todo" destDir="gen" verbose="true" addedTags="@xdoclet-generated at ${TODAY},@copyright The XDoclet Team,@author XDoclet,@version ${version}">
  53. <fileset dir="src" includes="**/*ServiceImpl.java"/>
  54. <springxml destinationFile="service-beans.xml" destDir="gen"/>
  55. </springdoclet>
  56. </target>
  57.  
  58.  
  59. <!-- 生成spring的xml文g -->
  60. <target name="Spring-action-beans" description="Spring-servlet-beans">
  61. <taskdef name="springdoclet" classname="xdoclet.modules.spring.SpringDocletTask" classpathref="xdoclet.classpath" />
  62. <springdoclet excludedTags="@version,@author,@todo" destDir="gen" verbose="true" addedTags="@xdoclet-generated at ${TODAY},@copyright The XDoclet Team,@author XDoclet,@version ${version}">
  63. <springxml destinationFile="action-beans.xml" destDir="gen"/>
  64. <fileset dir="src" includes="**/*Action.java"/>
  65. </springdoclet>
  66. </target>
  67.  
  68.  
  69. <!-- 生成spring的xml文g -->
  70. <target name="Spring-dao-beans" description="Spring-servlet-beans">
  71. <taskdef name="springdoclet" classname="xdoclet.modules.spring.SpringDocletTask" classpathref="xdoclet.classpath" />
  72. <springdoclet excludedTags="@version,@author,@todo" destDir="gen" verbose="true" addedTags="@xdoclet-generated at ${TODAY},@copyright The XDoclet Team,@author XDoclet,@version ${version}">
  73. <springxml destinationFile="dao-beans.xml" destDir="gen"/>
  74. <fileset dir="src" includes="**/*DAOIbatis.java"/>
  75. </springdoclet>
  76. </target>
  77.  
  78. </project>
  79.  


Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=


  1. /**
  2. * @spring.bean id="UserDAO"
  3. * @spring.property name="dataSource" ref="dataSource"
  4. * @spring.property name="sqlMapClient" ref="sqlMapClient"
  5. *
  6. * @author Conan
  7. *
  8. */
  9. public class UserDAOIbatis extends BaseDAOIBatis implements UserDAO {....}


-------------------------------------------


  1. /**
  2. * @spring.bean id="UserService"
  3. * @spring.property name="userDao" ref="UserDAO"
  4. *
  5. * @author Conan
  6. *
  7. */
  8. public class UserServiceImpl extends BaseManager implements UserService {...}



 ---------------------------------------------


  1. /**
  2. *
  3. * @struts.action path="/add" name="UserForm" input="/add.jsp"
  4. * type="org.springframework.web.struts.DelegatingActionProxy"
  5. * validate="true" scope="request"
  6. *
  7. * @struts.action-forward name="success" path="/success.jsp" redirect="true"
  8. * @struts.action-forward name="failure" path="/failure.jsp" redirect="true"
  9. *
  10. * @struts.action-form name="UserForm"
  11. *
  12. * @spring.bean
  13. * name="/add"
  14. * @spring.property
  15. * name="userService"
  16. * ref="UserService"
  17. *
  18. */
  19. public final class AddAction extends BaseAction {...}


------------------------------------------


  1. /**
  2. * @struts.form name="UserForm"
  3. */
  4. public class UserForm extends BaseForm{
  5.  
  6. /**
  7. * @struts.validator type="required"
  8. * @struts.validator type="mask" msgkey="error.age"
  9. * @struts.validator-var name="mask" value="^[0-9]*$"
  10. */
  11. public void setAge(Integer age) {
  12. this.age = age;
  13. }
  14.  
  15. }






jinfeng_wang 2008-03-20 09:52 发表评论
]]>
XDoclet Spring+Struts HowTo zzhttp://www.aygfsteel.com/jinfeng_wang/archive/2008/03/20/187406.htmljinfeng_wangjinfeng_wangThu, 20 Mar 2008 01:42:00 GMThttp://www.aygfsteel.com/jinfeng_wang/archive/2008/03/20/187406.htmlhttp://www.aygfsteel.com/jinfeng_wang/comments/187406.htmlhttp://www.aygfsteel.com/jinfeng_wang/archive/2008/03/20/187406.html#Feedback0http://www.aygfsteel.com/jinfeng_wang/comments/commentRss/187406.htmlhttp://www.aygfsteel.com/jinfeng_wang/services/trackbacks/187406.html

For all those out there using Spring together with Struts, i created a small howTo regarding automatic generation of relevant files, especially the boring action-servlet-xml file which must be in synch with your struts-config.xml, at least for all Struts actions which should be injected by Spring.

Lets start with the Action class:

/**
* Action to delete a Client
* Date: 09.02.2005
* Time: 15:29:15
*
* @author Logemann - Logentis e.K. (ml@logentis.de)
* @version $Id$
* @struts.action path="clientDelete" validate="false"
* type="org.springframework.web.struts.DelegatingActionProxy"
* name="emptyform"
* @struts.action-forward name="back"
* path="/clientManager.html" redirect="true"
* @spring.bean name="clientDelete"
*/
public class ClientDeleteAction extends Action {

ClientManager clientManagerService;



/**

* Spring injection

*

* @param clientManagerService clientManagerService

* @spring.property ref="clientManagerService"

*/

public void setClientManagerService(ClientManager clientManagerService) {

this.clientManagerService = clientManagerService;

}

[..]


With this tags, the ant build target outlined below will create a struts-config.xml and the necessary action-servlet.xml needed by Spring. Lets see how the target looks:

<path id="classpath">

<fileset dir="c:/xdoclet-1.2.2" includes="*.jar"/>
<fileset dir="c:/j2sdkee1.3.1/lib" includes="*.jar"/>
<fileset dir="c:/struts/lib" includes="struts.jar"/>
</path>

<taskdef name="springdoclet"
classname="xdoclet.modules.spring.SpringDocletTask"
classpathref="classpath"/>

<taskdef name="webdoclet"
classname="xdoclet.modules.web.WebDocletTask"
classpathref="classpath"/>

<target name="myTest">
<webdoclet destDir="c:\" force="true" verbose="true">
<fileset dir="${src.dir}">
<include name="**/*Form.java" />
<include name="**/*Action.java" />
<include name="**/*Servlet.java" />
</fileset>
<strutsconfigxml version="1.1" validateXml="true"/>
</webdoclet>

<springdoclet destDir="c:\" verbose="true">
<fileset dir="${src.dir}">
<include name="**/*Action.java" />
</fileset>
<springxml destinationFile="action-servlet.xml"/>
</springdoclet>
</target>

Be sure to modify the classpath definition and the destDir values of springdoclet and webdoclet to suit your needs. Right now the Spring task only searches for Actions in order to create action-servlet.xml, if you also want to create your normal service beans like ClientManagerService, you should create another springdoclet task and output things to applicationContext.xml if you like.

But this is mostly users choice, as you know, Spring supports from one to many bean definition files and its up to you how you want to have your spring xml world.

This will be created when you run the mentioned target:

(action-servlet.xml)


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC
"-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">

<beans
default-autowire="no"
default-lazy-init="false"
default-dependency-check="none"
>

<bean
name="clientDelete"
class="de.logentis.versysng.action.clientmanager.ClientDeleteAction"
>

<property name="clientManagerService">

<ref bean="clientManagerService"/>
</property>

</bean>

<!--
To include additional bean definitions for Spring in the generated
application context file, add a file to your XDoclet merge directory
called spring-beans.xml that contains the <bean></bean> markup.
-->
</beans>


(struts-config.xml)


<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<struts-config>

<!-- ========== Data Sources Definitions =================================== -->
<!--
Define your Struts data sources in a file called struts-data-sources.xml and place
it in your merge directory.
-->

<!-- ========== Form Bean Definitions =================================== -->
<form-beans>

<!--
If you have non XDoclet forms, define them in a file called struts-forms.xml and
place it in your merge directory.
-->
</form-beans>

<!-- ========== Global Exceptions Definitions =================================== -->
<!--
Define your exceptions in a file called global-exceptions.xml and place
it in your merge directory.
-->

<!-- ========== Global Forward Definitions =================================== -->
<!--
Define your forwards in a file called global-forwards.xml and place
it in your merge directory.
-->

<!-- ========== Action Mapping Definitions =================================== -->
<action-mappings>
<action
path="clientDelete"
type="org.springframework.web.struts.DelegatingActionProxy"
name="emptyform"
scope="request"
unknown="false"
validate="false"
>
<forward
name="back"
path="/clientManager.html"
redirect="true"
/>
</action>

<!-- If you have non XDoclet actions, define them in a file called struts-actions.xml and place it in your merge directory. -->
</action-mappings>

<!-- Define your Struts controller in a file called struts-controller.xml and place it in your merge directory. -->

<!-- Define your Struts message-resources in a file called struts-message-resources.xml and place it in your merge directory. -->

<!-- Define your Struts plugins in a file called struts-plugins.xml and place it in your merge directory. -->

</struts-config>



jinfeng_wang 2008-03-20 09:42 发表评论
]]>
Pro Spring: Spring and EJB (zz)http://www.aygfsteel.com/jinfeng_wang/archive/2005/03/18/2192.htmljinfeng_wangjinfeng_wangFri, 18 Mar 2005 06:35:00 GMThttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/18/2192.htmlhttp://www.aygfsteel.com/jinfeng_wang/comments/2192.htmlhttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/18/2192.html#Feedback1http://www.aygfsteel.com/jinfeng_wang/comments/commentRss/2192.htmlhttp://www.aygfsteel.com/jinfeng_wang/services/trackbacks/2192.html SummaryIn traditional J2EE applications, Enterprise JavaBeans (EJB) often forms the cornerstone of an application'...  阅读全文

jinfeng_wang 2005-03-18 14:35 发表评论
]]>
Pro Spring的目?/title><link>http://www.aygfsteel.com/jinfeng_wang/archive/2005/03/06/1768.html</link><dc:creator>jinfeng_wang</dc:creator><author>jinfeng_wang</author><pubDate>Sun, 06 Mar 2005 06:46:00 GMT</pubDate><guid>http://www.aygfsteel.com/jinfeng_wang/archive/2005/03/06/1768.html</guid><wfw:comment>http://www.aygfsteel.com/jinfeng_wang/comments/1768.html</wfw:comment><comments>http://www.aygfsteel.com/jinfeng_wang/archive/2005/03/06/1768.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jinfeng_wang/comments/commentRss/1768.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jinfeng_wang/services/trackbacks/1768.html</trackback:ping><description><![CDATA[PART 1 ???Getting Started with Spring<BR>CHAPTER 1 Introducing Spring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<BR>CHAPTER 2 Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<BR>CHAPTER 3 The Sample Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35<BR>PART 2 ???Spring Basics<BR>CHAPTER 4 Introducing Inversion of Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49<BR>CHAPTER 5 Beyond the Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93<BR>PART 3 ???Aspect Oriented Programming<BR>with Spring<BR>CHAPTER 6 Introducing Spring AOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157<BR>CHAPTER 7 More on Spring AOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205<BR>PART 4 ???Data Access with Spring<BR>CHAPTER 8 Spring JDBC Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249<BR>CHAPTER 9 Using Hibernate in Spring Applications . . . . . . . . . . . . . . . . . . . . . . . 279<BR>CHAPTER 10 iBATIS Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311<BR>vi ■CONTENTS AT A GLANCE<BR>PART 5 ???Spring in the Middle Tier<BR>CHAPTER 11 Designing and Implementing Spring-Based Applications . . . . . . 353<BR>CHAPTER 12 Transaction Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395<BR>CHAPTER 13 Spring and J2EE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439<BR>CHAPTER 14 Job Scheduling with Spring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487<BR>CHAPTER 15 Mail Support in Spring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517<BR>CHAPTER 16 Using Spring Remoting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549<BR>PART 6 ???Web Applications with Spring<BR>CHAPTER 17 Web Applications with Spring MVC . . . . . . . . . . . . . . . . . . . . . . . . . . 599<BR>CHAPTER 18 Beyond JSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645<BR>CHAPTER 19 Spring and Struts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679<BR>PART 7 ???Appendixes<BR>APPENDIX A Testing with Spring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697<BR>APPENDIX B The Spring Rich Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711<BR>APPENDIX C Spring IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729<BR>APPENDIX D The Future of Spring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 743<img src ="http://www.aygfsteel.com/jinfeng_wang/aggbug/1768.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jinfeng_wang/" target="_blank">jinfeng_wang</a> 2005-03-06 14:46 <a href="http://www.aygfsteel.com/jinfeng_wang/archive/2005/03/06/1768.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring Transactionhttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/04/1683.htmljinfeng_wangjinfeng_wangFri, 04 Mar 2005 06:15:00 GMThttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/04/1683.htmlhttp://www.aygfsteel.com/jinfeng_wang/comments/1683.htmlhttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/04/1683.html#Feedback1http://www.aygfsteel.com/jinfeng_wang/comments/commentRss/1683.htmlhttp://www.aygfsteel.com/jinfeng_wang/services/trackbacks/1683.htmlSpring TransactionQ通过Template+Callback机制Q实现对各种事务的统一装?/SPAN>

 

<bean id="transactionManager" //?/SPAN>JDBC Transaction的封?/SPAN>

       class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

       <property name="dataSource">

              <ref bean="dataSource"/>

       </property>

</bean>

 

<bean id="transactionManager" //?/SPAN>Hibernate事务的封?/SPAN>

       class="org.springframework.orm.hibernate.HibernateTransactionManager">

       <property name="sessionFactory">

              <ref bean="sessionFactory"/>

       </property>

</bean>

 

<bean id="transactionManager"http://?/SPAN>JDO事务的封?/SPAN>

       class="org.springframework.orm.jdo.JdoTransactionManager">

       <property name="persistenceManagerFactory">

              <ref bean="persistenceManagerFactory"/>

       </property>

</bean>

 

<bean id="transactionManager" //?/SPAN>JTA 事务的封?/SPAN>

       class="org.springframework.transaction.jta.JtaTransactionManager">

       <property name="transactionManagerName">

              <value>java:/TransactionManager</value>

       </property>

</bean>

 

<bean id="courseService"http://利用AOPQ将TransactionManager和普通的Service~织hQ实C务?/SPAN>

       class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

       <property name="proxyInterfaces">//~织后对外的接口

              <list>

                     <value>com.springinaction.training.service.CourseService</value>

              </list>

       </property>

       <property name="target">//目标

              <ref bean="courseServiceTarget"/>

       </property>

       <property name="transactionManager">//植入的事务管理?/SPAN>

              <ref bean="transactionManager"/>

       </property>

       <property name="transactionAttributeSource">//事务的参敎ͼ隔离度,Ҏ(gu)名等Q?/SPAN>

              <ref bean="attributeSource"/>

       </property>

</bean>



jinfeng_wang 2005-03-04 14:15 发表评论
]]>
Spring装Hibernatehttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/03/1654.htmljinfeng_wangjinfeng_wangThu, 03 Mar 2005 08:58:00 GMThttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/03/1654.htmlhttp://www.aygfsteel.com/jinfeng_wang/comments/1654.htmlhttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/03/1654.html#Feedback0http://www.aygfsteel.com/jinfeng_wang/comments/commentRss/1654.htmlhttp://www.aygfsteel.com/jinfeng_wang/services/trackbacks/1654.htmlSpringHibernateQ?/SPAN>

  有两U手D:(x)1、?/SPAN>HibernateTemplateQ?/SPAN>2、?/SPAN>HibernateDaoSupportQ实际上Q?/SPAN>HibernateDaoSupport本n是?/SPAN>HibernateTemplate的一个封装)(j)

   一切尽在代码中Q查?/SPAN>API唉!

注意Qhibernate 2.X和hibernate3.X的区别,我用的是2.X ?nbsp; 
 

package com.company.example.dao;

 

import java.util.List;

 

import com.company.example.model.Student;

 

public interface StudentDao {

    public abstract Student getStudent(final Integer id);

    public abstract void updateStudent(Student student);

    public abstract List findStudentsByLastName(String lastName);

}

==================

package com.company.example.dao.hibernateImpl;

 

import java.util.List;

 

import net.sf.hibernate.Hibernate;

import net.sf.hibernate.HibernateException;

import net.sf.hibernate.Session;

 

import org.springframework.orm.hibernate.HibernateCallback;

import org.springframework.orm.hibernate.HibernateTemplate;

 

import com.company.example.dao.StudentDao;

import com.company.example.model.Student;

 

public class StudentDaoHibernate implements StudentDao {

    HibernateTemplate hibernateTemplate;

 

    public static void main(String[] args) {

    }

 

    public HibernateTemplate getHibernateTemplate() {

        return hibernateTemplate;

    }

 

    public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {

        this.hibernateTemplate = hibernateTemplate;

    }

 

    public Student getStudent(final Integer id) {

        return (Student) hibernateTemplate.execute(new HibernateCallback() {

            public Object doInHibernate(Session session)

                    throws HibernateException {

                return session.load(Student.class, id);

            }

        });

    }

 

    public Student getStudent2(Integer id) {

        return (Student) hibernateTemplate.load(Student.class, id);

    }

 

    public void updateStudent(Student student) {

        hibernateTemplate.update(student);

    }

 

    public List findStudentsByLastName(String lastName) {

        return hibernateTemplate.find("from Student student "

                + "where student.lastName = ?", lastName, Hibernate.STRING);

    }

}

public class StudentDaoHibernate extends HibernateDaoSupport

implements StudentDao {

 ...........

}
======The Spring XML Configuration===========
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"<beans>
 <bean id="dataSource"
  class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName">
   <value>java:comp/env/jdbc/trainingDatasource</value>
  </property>
 </bean>
 
 <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
  <property name="dataSource">
   <ref bean="dataSource"/>
  </property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</prop>
   </props>
  </property>
  <property name="mappingResources">
   <list> <!--list of each hbm.xml-->
    <value>Student.hbm.xml</value>
    <value>Course.hbm.xml</value>
   </list>
  </property>
  <property name="mappingDirectoryLocations">
   <list>
    <!--list the directory of the hbm.xml, including each xml file in the dir-->
    <value>classpath:/com/springinaction/training/model</value>
   </list>
  </property>
 </bean>
 
 <bean id="hibernateTemplate"
  class="org.springframework.orm.hibernate.HibernateTemplate">
  <property name="sessionFactory">
   <ref bean="sessionFactory"/>
  </property>
 </bean>

 <bean id="studentDao" class="com.company.example.dao.hibernateImpl.StudentDaoHibernate">
  <property name="hibernateTemplate">
   <ref bean="hibernateTemplate"/>
  </property>
 </bean>

 <bean id="courseDao" class="com.company.example.dao.hibernateImpl.CourseDaoHibernate">
  <property name="hibernateTemplate">
   <ref bean="hibernateTemplate"/>
  </property>
 </bean>
</beans>



jinfeng_wang 2005-03-03 16:58 发表评论
]]>
Spring JDBC DAO的两个examplehttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/03/1647.htmljinfeng_wangjinfeng_wangThu, 03 Mar 2005 06:40:00 GMThttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/03/1647.htmlhttp://www.aygfsteel.com/jinfeng_wang/comments/1647.htmlhttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/03/1647.html#Feedback3http://www.aygfsteel.com/jinfeng_wang/comments/commentRss/1647.htmlhttp://www.aygfsteel.com/jinfeng_wang/services/trackbacks/1647.html阅读全文

jinfeng_wang 2005-03-03 14:40 发表评论
]]>
Spring DAO的哲?/title><link>http://www.aygfsteel.com/jinfeng_wang/archive/2005/03/03/1644.html</link><dc:creator>jinfeng_wang</dc:creator><author>jinfeng_wang</author><pubDate>Thu, 03 Mar 2005 05:04:00 GMT</pubDate><guid>http://www.aygfsteel.com/jinfeng_wang/archive/2005/03/03/1644.html</guid><wfw:comment>http://www.aygfsteel.com/jinfeng_wang/comments/1644.html</wfw:comment><comments>http://www.aygfsteel.com/jinfeng_wang/archive/2005/03/03/1644.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jinfeng_wang/comments/commentRss/1644.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jinfeng_wang/services/trackbacks/1644.html</trackback:ping><description><![CDATA[<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-layout-grid-align: none; mso-char-indent-count: 2.0; mso-char-indent-size: 10.5pt" align=left><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">Spring DAO</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">的哲学:(x)</SPAN><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-layout-grid-align: none; mso-char-indent-count: 2.0; mso-char-indent-size: 10.5pt" align=left><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">装所有的数据库访问实玎ͼ包括</SPAN><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">JDBC,JDO,Hibernate</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">{?/SPAN><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">Spring</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">的异怸般都?/SPAN><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">RuntimeException</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">Q数据访问的根异常是</SPAN><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">DataAccessException</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">Q所有的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">Spring</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">的数据访问异帔Rl承</SPAN><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">DataAccessException</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">。此?/SPAN><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">DataAccessException</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">?/SPAN><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">nestedRuntimeException</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">子类中,已经所有的异常栈都q行了记录?/SPAN><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">Spring</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">?/SPAN><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">DAO</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">异常Ҏ(gu)有底层的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">DAO</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">讉K实现层的异常q行了统一的封装,q给Z更ؓ(f)有意义的异常?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Courier; mso-font-kerning: 0pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">CleanupFailureDataAccessException</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">Q清除失败异?/SPAN><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">DataAccessResourceFailureException</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">Q资源访问异?/SPAN><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">DataIntegrityViolationException</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">Q完整性约束异?/SPAN><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">DataRetrievalFailureException</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">Q数据获取异?/SPAN><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">DeadlockLoserDataAccessException</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">Q死锁访问异?/SPAN><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">IncorrectUpdateSemanticsDataAccessException</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">Q更新出错异?/SPAN><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">InvalidDataAccessApiUsageException</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">Q无效数据访?/SPAN><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">API</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">使用异常</SPAN><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">InvalidDataAccessResourceUsageException</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">Q无效数据访问资源用异?/SPAN><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">OptimisticLockingFailureException</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">Q乐观锁p|异常</SPAN><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">TypeMismatchDataAccessException</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">Q类型匹配失败异?/SPAN><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">UncategorizedDataAccessException</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt">Q其他原因异?BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Courier; mso-font-kerning: 0pt"><o:p><BR><BR><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Courier; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">Spring</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Courier; mso-hansi-font-family: Courier; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">使用</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Courier; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">Template</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Courier; mso-hansi-font-family: Courier; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Courier; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">Callback</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Courier; mso-hansi-font-family: Courier; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">模式完成了对底层实现的统一装Q其?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Courier; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">Template</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Courier; mso-hansi-font-family: Courier; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">负责完成那些通用的功能(处理事务、管理资源、处理异常)(j)Q?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Courier; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">Callback</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Courier; mso-hansi-font-family: Courier; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">则完成变化的那部分内容(创徏</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Courier; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">statement</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Courier; mso-hansi-font-family: Courier; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">、设定参?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Courier; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">parameter</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Courier; mso-hansi-font-family: Courier; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">、生成数据集</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Courier; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">result</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Courier; mso-hansi-font-family: Courier; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">Q。参考图</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Courier; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">4.2</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Courier; mso-hansi-font-family: Courier; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Courier; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">4.3</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Courier; mso-hansi-font-family: Courier; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">太重要了?/SPAN></o:p></SPAN></P><img src ="http://www.aygfsteel.com/jinfeng_wang/aggbug/1644.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jinfeng_wang/" target="_blank">jinfeng_wang</a> 2005-03-03 13:04 <a href="http://www.aygfsteel.com/jinfeng_wang/archive/2005/03/03/1644.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring AOP中的Introductionhttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/03/1637.htmljinfeng_wangjinfeng_wangThu, 03 Mar 2005 02:49:00 GMThttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/03/1637.htmlhttp://www.aygfsteel.com/jinfeng_wang/comments/1637.htmlhttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/03/1637.html#Feedback0http://www.aygfsteel.com/jinfeng_wang/comments/commentRss/1637.htmlhttp://www.aygfsteel.com/jinfeng_wang/services/trackbacks/1637.htmlSpring AOP中的IntroductionQ?/SPAN>

正如前面已经提到的,Introduction和前面的四个advice是有很大的区别的Q?/SPAN>introduction用于l?/SPAN>target引入新的接口Q例如锁Q状态等功能Q,生成一?/SPAN>mix-in的接口。而普通的advice只是在原有接口基上增加附加内宏V?/SPAN>

?/SPAN>Spring中,完成一?/SPAN>introduction需要三个内容:(x)1、将要添加的新接口的定义Q?/SPAN>2、该新接口的实现Q在实现?/SPAN>class中,必须实现Spring?/SPAN>IntroductionInterceptor接口Q?/SPAN>Spring in action原文有误Q,3?/SPAN>IntroductionAdvisor接口的实?/SPAN>?/SPAN>

public interface IntroductionInterceptor extends MethodInterceptor {

  boolean implementsInterface(Class intf);

java.lang.Object invoke(MethodInvocation invocation) //此方法来源于MethodInterceptor

}

其中implementsInterfaceҎ(gu)q回一?/SPAN>boolean|此方法用于判断该introduction实现是否实现了某个接口―?/SPAN>intf参数。所有对intf接口的调用都?x){发给invokeҎ(gu)Q由invokeҎ(gu)完成相应的Q务。下面给Z子(l某个类d是否auditable功能Q:(x)

            public interface Auditable {//1?/SPAN>auditable接口的定?/SPAN>

void setLastModifiedDate(Date date);

Date getLastModifiedDate();

}

public class AuditableMixin

implements IntroductionInterceptor, Auditable {//2?/SPAN>auditable接口的实玎ͼ同时要实?/SPAN>IntroductionInterceptor接口

public boolean implementsInterface(Class intf) {

return intf.isAssignableFrom(Auditable.class);  // AuditableMixin实现?/SPAN>Auditablecȝ功能

}

public Object invoke(MethodInvocation m) throws Throwable {

if (implementsInterface(m.getMethod().getDeclaringClass())) {

//?/SPAN>invoke的参?/SPAN>mq行判断Q当前的调用是否?/SPAN>implementsInterface范围内,卻I当前的调用是否是auditable接口中的Ҏ(gu)Q?/SPAN>

return m.getMethod().invoke(this, m.getArguments());

//q里?/SPAN>this是自己Q调用引入的Ҏ(gu)Q属?/SPAN>auditable接口的方法)(j)Q这样也qtargetd了新?/SPAN>auditable接口?/SPAN>

} else {

return m.proceed();//其他Ҏ(gu)的调用?/SPAN>

}

}

private Date lastModifiedDate; //实现auditable接口?/SPAN>

public Date getLastModifiedDate() {

return lastModifiedDate;

}

public void setLastModifiedDate(Date lastModifiedDate) {

this.lastModifiedDate = lastModifiedDate;

}

}

?/SPAN>Spring中,除了上面直接实现IntroductionInterceptor接口之外Q还可以通过l承DelegatingIntroductionInterceptorcd现。其?/SPAN>DelegatingIntroductionInterceptorl出?/SPAN>IntroductionInterceptor接口中的两个Ҏ(gu)Q?/SPAN>implementsInterfaceQ?/SPAN>invokeQ的默认实现Q你仅需要实?/SPAN>auditable接口卛_?/SPAN>

通过跟踪Spring源代码可以发玎ͼ(x)DelegatingIntroductionInterceptor?/SPAN>implementsInterface Q在IntroductionInfoSupportcMQ和invokeҎ(gu)与上面的代码的Ş式基本一致。下面是利用DelegatingIntroductionInterceptor写出?/SPAN>AuditableMixinQ?/SPAN>

public class AuditableMixin

extends DelegatingIntroductionInterceptor implements Auditable {

private Date lastModifiedDate;

public Date getLastModifiedDate() {

return lastModifiedDate;

}

public void setLastModifiedDate(Date lastModifiedDate) {

this.lastModifiedDate = lastModifiedDate;

}      

}

    注意C点:(x)上面的两?/SPAN>AuditableMixin的实现都仅仅是给Targetd行ؓ(f)Q但是未曾改?/SPAN>Target的原有行为(因ؓ(f)?/SPAN>invokeҎ(gu)的实CQ还是会(x)转发l?/SPAN>TargetQ。如果需要改?/SPAN>Target的行?SPAN style="COLOR: red">Q例如给Target增加lock接口Q一旦处?/SPAN>locked状态,那么再调?/SPAN>Target的方法就?x)出现异常?j)Q这需要自己写代码修改invokeҎ(gu)?/SPAN>

public class ImmutableMixin

extends DelegatingIntroductionInterceptor implements Immutable {

private boolean immutable;

public void setImmutable(boolean immutable) {

this.immutable = immutable;

}

public Object invoke(MethodInvocation mi) throws Throwable {

String name = mi.getMethod().getName();

if (immutable && name.indexOf("set") == 0) { //q里一旦已l是immutable了,那么׃可以调用setXXXҎ(gu)了,q也改变了Target的行为,而不是前面的仅增加接口?/SPAN>

throw new IllegalModificationException();

}

return super.invoke(mi);

}

}

 

Spring中的Introduction需要有自己?/SPAN>advisor: IntroductionAdvisor

剩下的也是和前面一L(fng)xml文g的编写了?BR>

Spring中用Introduction需要注意的问题Q?BR>    ׃Spring使用的是动态AOP,q没有象AspectJ使用静态的代码预编译的方式生成AOP代码Q因此只有你从Spring的BeanFactory中得到的Introduction Bean才会(x)已经被introductedQ而直接在代码中new出来的target对象则不hIntorduction功能?你可以用一个FactoryQ封装对Introduction的创建?/SPAN>

jinfeng_wang 2005-03-03 10:49 发表评论
]]>
Spring AOP中的pointcuthttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/02/1615.htmljinfeng_wangjinfeng_wangWed, 02 Mar 2005 09:33:00 GMThttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/02/1615.htmlhttp://www.aygfsteel.com/jinfeng_wang/comments/1615.htmlhttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/02/1615.html#Feedback0http://www.aygfsteel.com/jinfeng_wang/comments/commentRss/1615.htmlhttp://www.aygfsteel.com/jinfeng_wang/services/trackbacks/1615.htmlSpring AOP中的pointcutQ?/SPAN>

PointCuts用于定义所需要“拦截”的class?qing)?/SPAN>method。分为静态、动态两U?/SPAN>pointcut。其中静?/SPAN>pointcuts仅和class name, method name相关Q可以在配置文g中通过正则表达式进行部|Ԍ因此它们都可以在q行前进行确认。而动?/SPAN>pointcuts则需要考虑到方法的参数Q在q行时动态的认pointcuts。一般来_(d)都是Ҏ(gu)method?/SPAN>class的名字来q行。其涉及(qing)到的接口如下定义Q?/SPAN>

public interface Pointcut {

    ClassFilter getClassFilter();

    MethodMatcher getMethodMatcher();

}

public interface ClassFilter {

    boolean matches(Class clazz);

}

public interface MethodMatcher {

    boolean matches(Method m, Class targetClass);

    boolean isRuntime();

    boolean matches(Method m, Class targetClass, Object[] args);

}

两种静?/SPAN>pointcut的实玎ͼ(x)

NameMatchMethodPointcutQ只能对Ҏ(gu)名进行判别?/SPAN>

RegexpMethodPointcutQ可以对cd、方法名使用正则表达式判别?/SPAN>

<beans>

       <bean id="maidServiceTarget"

              class="com.springinaction.chapter03.cleaning.MaidService"/>

      

       <bean id="queryInterceptor" class="com.springinaction.chapter03.cleaning.QueryInterceptor"/>

 

       <bean id="queryPointcutAdvisor"

              class="org.springframework.aop.support.RegExpPointcutAdvisor">

              <property name="pattern">

                     <value>.*get.+By.+</value>

              </property>

              <property name="advice">

                     <ref bean="queryInterceptor"/>

              </property>

       </bean>

      

       <bean id="maidService"

              class="org.springframework.aop.framework.ProxyFactoryBean">

              <property name="proxyInterfaces">

                     <value>com.springinaction.chapter03.cleaning.MaidService</value>

              </property>

              <property name="interceptorNames">

                     <list>

                            <value>queryPointcutAdvisor</value>

                     </list>

              </property>

              <property name="target">

                     <value ref="maidServiceTarget">

              </property>

       </bean>

</beans>

一U动?/SPAN>pointcut的实玎ͼ(x)

ControlFlowPointcutQ根据当前运行栈的情况,军_当前?/SPAN>advice是否需要被触发。因为它完全Zq行时栈的情况做决策Q所以运行速度肯定?x)变慢?/SPAN>

<beans>

       <bean id="myServiceTarget" class="MyServiceImpl"/>

      

       <bean id="servletInterceptor" class="MyServletInterceptor"/>

      

       <bean id="servletPointcut" class="org.springframework.aop.support.ControlFlowPointcut">

              <constructor-arg>

                     <value>javax.servlet.http.HttpServlet</value>

              </constructor-arg>

       </bean>

 

       <bean id="servletAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">

              <property name="advice">

                     <ref bean="servletInterceptor"/>

              </property>

              <property name="pointcut">

                     <ref bean="servletPointcut"/>

              </property>

       </bean>

       <bean id="service" class="org.springframework.aop.framework.ProxyFactoryBean">

              <property name="proxyInterfaces">

                     <value>MyService</value>

              </property>

              <property name="interceptorNames">

                     <list>

                            <value>servletAdvisor</value>

                     </list>

              </property>

              <property name="target">

                     <value ref="myServiceTarget">

              </property>

       </bean>

</beans>



jinfeng_wang 2005-03-02 17:33 发表评论
]]>
SpringAOP中的advisorhttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/02/1614.htmljinfeng_wangjinfeng_wangWed, 02 Mar 2005 09:32:00 GMThttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/02/1614.htmlhttp://www.aygfsteel.com/jinfeng_wang/comments/1614.htmlhttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/02/1614.html#Feedback0http://www.aygfsteel.com/jinfeng_wang/comments/commentRss/1614.htmlhttp://www.aygfsteel.com/jinfeng_wang/services/trackbacks/1614.htmlSpringAOP中的advisorQ?/SPAN>

前面已经提到Q?/SPAN>advisor是是PointCut?/SPAN>Advice的综合体Q完整描qC一?/SPAN>advice会(x)?/SPAN>pointcut所定义的位|被触发。也是_(d)它包含了pointcut?/SPAN>advice两项内容Q这两项内容则用于分别给?/SPAN>advice调用所发生的位|和发生的内宏V其接口如下Q?/SPAN>

public interface PointcutAdvisor {

Pointcut getPointcut();

Advice getAdvice();

}

jinfeng_wang 2005-03-02 17:32 发表评论
]]>
Spring AOP中的四个Advicehttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/02/1612.htmljinfeng_wangjinfeng_wangWed, 02 Mar 2005 09:31:00 GMThttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/02/1612.htmlhttp://www.aygfsteel.com/jinfeng_wang/comments/1612.htmlhttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/02/1612.html#Feedback0http://www.aygfsteel.com/jinfeng_wang/comments/commentRss/1612.htmlhttp://www.aygfsteel.com/jinfeng_wang/services/trackbacks/1612.html 

1?SPAN style="FONT: 7pt 'Times New Roman'">  around adviceQ所?/SPAN>around advice必须实现MethodInterceptor接口Q注?/SPAN>invokeҎ(gu)的参?/SPAN>invocation?/SPAN>MethodInvocation接口Q在此中包含了许多信息,包括其所装的方法及(qing)其参敎ͼAOP proxy?/SPAN>Jointcut{?/SPAN>

public interface MethodInterceptor extends Interceptor {

                  Object invoke(MethodInvocation invocation) throws Throwable;

}

    在实?/SPAN>around adviceӞ?/SPAN>before advice?/SPAN>after advice有着两个很大的区别:(x)1、必dinvokeҎ(gu)中调?/SPAN>MethodInvocation.proceed()Q这h能将所有调用gl下去,调用target对象?/SPAN>methodQ?/SPAN>2、必自p回一?/SPAN>objectQ该object甚至可以?/SPAN>target’s method的返回g一栗?/SPAN>

 

2?SPAN style="FONT: 7pt 'Times New Roman'">  before adviceQ在jointcut执行之前Q运?/SPAN>advice。必d?/SPAN>MethodBeforeAdvice接口?/SPAN>

public interface MethodBeforeAdvice extends BeforeAdvice {

    void before(Method m, Object[] args, Object target) throws Throwable;

}

3?SPAN style="FONT: 7pt 'Times New Roman'">  after adviceQ在jointcut执行之后Q运?/SPAN>advice。必d?/SPAN>AfterReturningAdvice接口?/SPAN>

public interface AfterReturningAdvice extends Advice {

    void afterReturning(Object returnValue, Method m, Object[] args, Object target)

            throws Throwable;

}

4?SPAN style="FONT: 7pt 'Times New Roman'">  throws adviceQ在jointcut执行出现异常的时候,q行?/SPAN>advice。必d?/SPAN>ThrowsAdvice接口。但是此接口只是一个标识接口,必须实现此外实现下面的方法:(x) 

afterThrowing([Method], [args], [target], subclassOfThrowable)

   此外Q在jointcut出现异常Ӟ具体调用哪个afterThrowingҎ(gu)Q这涉?qing)到cd判别Q最W合cd判别的将?x)被调用?/SPAN>

jinfeng_wang 2005-03-02 17:31 发表评论
]]>
Spring AOP 概念http://www.aygfsteel.com/jinfeng_wang/archive/2005/03/02/1611.htmljinfeng_wangjinfeng_wangWed, 02 Mar 2005 09:30:00 GMThttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/02/1611.htmlhttp://www.aygfsteel.com/jinfeng_wang/comments/1611.htmlhttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/02/1611.html#Feedback0http://www.aygfsteel.com/jinfeng_wang/comments/commentRss/1611.htmlhttp://www.aygfsteel.com/jinfeng_wang/services/trackbacks/1611.html切面Q?/SPAN>AspectQ:(x)对象操作q程中的截面Q也是某方面的dQ例如事务、日志?/SPAN>

q接点(JoinPointQ:(x)E序q行q程中的某个阶段炏V如某个Ҏ(gu)调用Q或者某个异常被抛出?/SPAN>

处理逻辑Q?/SPAN>AdviceQ:(x)在某个连接点所采用的处理逻辑。处理逻辑的调用模式通常有三U:(x)

i.        AroundQ在q接点前后插入预处理q程和后处理q程?/SPAN>

ii.       BeforeQ仅在连接点之前插入预处理过E?/SPAN>

iii.     AfterQ在q接点之后进行处理?/SPAN>

iv.    ThrowQ在q接Ҏ(gu)出异常时q行异常处理?/SPAN>

切点Q?/SPAN>PointCutQ:(x)一pdq接点的集合Q它指明处理方式Q?/SPAN>AdviceQ将在何处被触发Q可以用正则表辑ּ表达?/SPAN>

AdvisorQ是PointCut?/SPAN>Advice的综合体Q完整描qC一?/SPAN>advice会(x)?/SPAN>pointcut所定义的位|被触发?/SPAN>

IntroductionQؓ(f)advised object加上一定的Ҏ(gu)或者数据成员。与Advice属于q列的概念,但有着一定的区别?/SPAN>Advice只是l?/SPAN>target附加上其他的功能Q用者甚臛_以觉察不刎ͼ但是Introduction则添加了其他的功能,例如l?/SPAN>target赋予?/SPAN>lock功能Q状态等?/SPAN>

jinfeng_wang 2005-03-02 17:30 发表评论
]]>
Spring的配|文?/title><link>http://www.aygfsteel.com/jinfeng_wang/archive/2005/03/02/1603.html</link><dc:creator>jinfeng_wang</dc:creator><author>jinfeng_wang</author><pubDate>Wed, 02 Mar 2005 03:48:00 GMT</pubDate><guid>http://www.aygfsteel.com/jinfeng_wang/archive/2005/03/02/1603.html</guid><wfw:comment>http://www.aygfsteel.com/jinfeng_wang/comments/1603.html</wfw:comment><comments>http://www.aygfsteel.com/jinfeng_wang/archive/2005/03/02/1603.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jinfeng_wang/comments/commentRss/1603.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jinfeng_wang/services/trackbacks/1603.html</trackback:ping><description><![CDATA[<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US>Spring</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的配|文?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: left; mso-list: l1 level1 lfo5; tab-stops: list 18.0pt; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Courier; mso-font-kerning: 0pt">1?SPAN style="FONT: 7pt 'Times New Roman'">  </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对于那些使用到有限外部资源的</SPAN><SPAN lang=EN-US>bean</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q无非必要,请尽量?/SPAN><SPAN lang=EN-US>singleton</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Courier; mso-font-kerning: 0pt"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: left; mso-list: l1 level1 lfo5; tab-stops: list 18.0pt; mso-layout-grid-align: none" align=left><SPAN lang=EN-US>2?SPAN style="FONT: 7pt 'Times New Roman'">  </SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9.5pt; FONT-FAMILY: Courier; mso-font-kerning: 0pt">init-method</SPAN><SPAN style="FONT-SIZE: 9.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Courier; mso-hansi-font-family: Courier; mso-font-kerning: 0pt">?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9.5pt; FONT-FAMILY: Courier; mso-font-kerning: 0pt">Bean</SPAN><SPAN style="FONT-SIZE: 9.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Courier; mso-hansi-font-family: Courier; mso-font-kerning: 0pt">创徏开始时调用Q?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9.5pt; FONT-FAMILY: Courier; mso-font-kerning: 0pt">destory-method</SPAN><SPAN style="FONT-SIZE: 9.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Courier; mso-hansi-font-family: Courier; mso-font-kerning: 0pt">在销毁时调用</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9.5pt; FONT-FAMILY: Courier; mso-font-kerning: 0pt">.Spring</SPAN><SPAN style="FONT-SIZE: 9.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Courier; mso-hansi-font-family: Courier; mso-font-kerning: 0pt">自己提供?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9.5pt; FONT-FAMILY: Courier; mso-font-kerning: 0pt">InitializingBean</SPAN><SPAN style="FONT-SIZE: 9.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Courier; mso-hansi-font-family: Courier; mso-font-kerning: 0pt">Q?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9.5pt; FONT-FAMILY: Courier; mso-font-kerning: 0pt">DisposableBean</SPAN><SPAN lang=EN-US style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">.</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">q两个接口完成这两个功能Q一</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/SPAN><SPAN lang=EN-US>Bean</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象实现了这两个接口Q则无需q行M配置Q容器就?x)实现这两个功能。(当然Q这也就使得你的应用?/SPAN><SPAN lang=EN-US>Spring API</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">捆绑C一P(j)</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: left; mso-list: l1 level1 lfo5; tab-stops: list 18.0pt; mso-layout-grid-align: none" align=left><SPAN lang=EN-US>3?SPAN style="FONT: 7pt 'Times New Roman'">  </SPAN></SPAN><SPAN lang=EN-US>Innner Bean</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q这L(fng)配置使得</SPAN><SPAN lang=EN-US>inner bean</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">只能?/SPAN><SPAN lang=EN-US>wrapper bean</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所引用。这点在</SPAN><SPAN lang=EN-US>AOP</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中尤其有用:(x)</SPAN><SPAN lang=EN-US>BeanFactory</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">只能讉K</SPAN><SPAN lang=EN-US>AOProxy</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q而不能直接得?/SPAN><SPAN lang=EN-US>AOProxy</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所装?/SPAN><SPAN lang=EN-US>target object</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: left; mso-list: l1 level1 lfo5; tab-stops: list 18.0pt; mso-layout-grid-align: none" align=left><SPAN lang=EN-US>4?SPAN style="FONT: 7pt 'Times New Roman'">  </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">集合元素</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center; mso-layout-grid-align: none" align=center><SPAN lang=EN-US><list> </SPAN><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-char-type: symbol; mso-symbol-font-family: Wingdings"><SPAN style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">à</SPAN></SPAN><SPAN lang=EN-US>java.awt.List, arrays</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center; mso-layout-grid-align: none" align=center><SPAN lang=EN-US><set> </SPAN><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-char-type: symbol; mso-symbol-font-family: Wingdings"><SPAN style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">à</SPAN></SPAN><SPAN lang=EN-US>java.awt.Set</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center; mso-layout-grid-align: none" align=center><SPAN lang=EN-US><map> </SPAN><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-char-type: symbol; mso-symbol-font-family: Wingdings"><SPAN style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">à</SPAN></SPAN><SPAN lang=EN-US>java.awt.Map</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center; mso-layout-grid-align: none" align=center><SPAN lang=EN-US><props> </SPAN><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-char-type: symbol; mso-symbol-font-family: Wingdings"><SPAN style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">à</SPAN></SPAN><SPAN lang=EN-US>java.awt.Properties</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: left; mso-list: l1 level1 lfo5; tab-stops: list 18.0pt; mso-layout-grid-align: none" align=left><SPAN lang=EN-US>5?SPAN style="FONT: 7pt 'Times New Roman'">  </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">讄I|(x)</SPAN><SPAN lang=EN-US><property name="foo"><null/><property></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: left; mso-list: l1 level1 lfo5; tab-stops: list 18.0pt; mso-layout-grid-align: none" align=left><SPAN lang=EN-US>6?SPAN style="FONT: 7pt 'Times New Roman'">  </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">构造函数注入:(x)用于那些必须的?/SPAN><SPAN lang=EN-US>final</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的参数。如果构造函数的参数可能引v冲突Q可以在配置文g中给各参数加?/SPAN><SPAN lang=EN-US>type</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo5; tab-stops: list 18.0pt; mso-layout-grid-align: none"><SPAN lang=EN-US>7?SPAN style="FONT: 7pt 'Times New Roman'">  </SPAN></SPAN><SPAN lang=EN-US>autowiring</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q它?x)带来一定的问题Q因为无论如?/SPAN><SPAN lang=EN-US>autowiring</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q都无法保证其结果一定正,很可能会(x)出现许多与预期不一致的地方?/SPAN></P><img src ="http://www.aygfsteel.com/jinfeng_wang/aggbug/1603.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jinfeng_wang/" target="_blank">jinfeng_wang</a> 2005-03-02 11:48 <a href="http://www.aygfsteel.com/jinfeng_wang/archive/2005/03/02/1603.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring中Container理Beanhttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/02/1602.htmljinfeng_wangjinfeng_wangWed, 02 Mar 2005 02:36:00 GMThttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/02/1602.htmlhttp://www.aygfsteel.com/jinfeng_wang/comments/1602.htmlhttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/02/1602.html#Feedback0http://www.aygfsteel.com/jinfeng_wang/comments/commentRss/1602.htmlhttp://www.aygfsteel.com/jinfeng_wang/services/trackbacks/1602.html?/SPAN>Spring中,含有两个重要?/SPAN>ContainerQ用于管理这?/SPAN>javabean他们?/SPAN>BeanFactory?/SPAN>ApplicationContext。其?/SPAN>ApplicationContextl承?/SPAN>BeanFactory的所有功能,q提供了i18n、统一载入资源、事件分发等功能?/SPAN>

?/SPAN>BeanFactory中,所有的bean对象的创建都?/SPAN>lazy的,包括那些singleton bean。只?/SPAN>javabean对象必须被用的时候,才会(x)创徏该对象,才会(x)正式的解析相应的xml标记Q解析该bean?/SPAN>property{。但是在ApplicationContextQ它可以预先载入sigleton beanQ而不是直C用时才创建?/SPAN>

 

BeanFactory最常用的实现是XmlBeanFactoryQ蝲入“定?/SPAN>xml”文Ӟ(x)

BeanFactory factory = new XmlBeanFactory(new FileInputStream("beans.xml"));

 

ApplicationContext有三U实玎ͼ(x)ClassPathXmlApplicationContextQ?/SPAN>FileSystemXmlApplicationContextQ?/SPAN>XmlWebApplicationContext。其中前两者也是基于\径的Q和BeanFactory?/SPAN>xml文g定位方式一致?/SPAN>

ApplicationContext context =new FileSystemXmlApplicationContext("c:/foo.xml");

ApplicationContext context = new ClassPathXmlApplicationContext("foo.xml");

 

BeanFactoryBean对象的生命周期:(x)

1?SPAN style="FONT: 7pt 'Times New Roman'">  使用构造函数创?/SPAN>Bean对象

2?SPAN style="FONT: 7pt 'Times New Roman'">  Bean对象autowire被执?/SPAN>

3?SPAN style="FONT: 7pt 'Times New Roman'">  Bean对象调用各项setXXXҎ(gu)

4?SPAN style="FONT: 7pt 'Times New Roman'">  如果?/SPAN>Bean实现?/SPAN>BeanNameAware接口Q则调用该对象的setBeanName()Ҏ(gu)Q设|其IDQ已l在xml配置文g中写好了Q?/SPAN>

5?SPAN style="FONT: 7pt 'Times New Roman'">  如果?/SPAN>Bean实现?/SPAN>BeanFactoryAware接口Q则调用该对象的setBeanFactory()Ҏ(gu)Q传?/SPAN>BeanFactory对象自n

6?SPAN style="FONT: 7pt 'Times New Roman'">  如果已经配置?/SPAN>BeanPostProcessorQ那么调?/SPAN>BeanPostProcessors?/SPAN>pre-

ProcessBeforeInitialization()Ҏ(gu)Q对该Bean对象q行处理Q?/SPAN>

7?SPAN style="FONT: 7pt 'Times New Roman'">  如果?/SPAN>bean自定义了init()Ҏ(gu)Q那么调用此Ҏ(gu)

8?SPAN style="FONT: 7pt 'Times New Roman'"> 如果已经配置?/SPAN>BeanPostProcessorQ那么调用该BeanPostProcessors?/SPAN>post

ProcessBeforeInitialization()Ҏ(gu)Q对该Bean对象q行处理

9?SPAN style="FONT: 7pt 'Times New Roman'">  正常使用

10?SPAN style="FONT: 7pt 'Times New Roman'">              pȝ销毁,如果?/SPAN>bean对象实现?/SPAN>DisposableBean接口Q则调用?/SPAN>destory()Ҏ(gu)Q?/SPAN>

11?SPAN style="FONT: 7pt 'Times New Roman'">              最后调用用户在配置文g中编写的destroy-method

 



jinfeng_wang 2005-03-02 10:36 发表评论
]]>
Sping LiveW记一http://www.aygfsteel.com/jinfeng_wang/archive/2005/03/01/1595.htmljinfeng_wangjinfeng_wangTue, 01 Mar 2005 09:39:00 GMThttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/01/1595.htmlhttp://www.aygfsteel.com/jinfeng_wang/comments/1595.htmlhttp://www.aygfsteel.com/jinfeng_wang/archive/2005/03/01/1595.html#Feedback2http://www.aygfsteel.com/jinfeng_wang/comments/commentRss/1595.htmlhttp://www.aygfsteel.com/jinfeng_wang/services/trackbacks/1595.html 

 

整个Web应用分ؓ(f)四部?/SPAN>

1?SPAN style="FONT: 7pt 'Times New Roman'">  单独?/SPAN>DAOQ负责数据访问,执行CUID(create, update, insert ,delete)Q?SPAN style="COLOR: red">完成O/R映射。不涉及(qing)M的其他逻辑Q仅执行q以上的操作Q如果有唯一性检查、事务也不需要做。(可以在数据库端加一?/SPAN>trigger,constraintQ?SPAN style="COLOR: red">该层需要定?/SPAN>DAO接口Q?/SPAN>DAO实现(hibernateQ?/SPAN>ibaitsQ?/SPAN>JDBC{?/SPAN>)?/SPAN>

2?SPAN style="FONT: 7pt 'Times New Roman'">  单的Logic ObjectQ?/SPAN>Java BeanQ,data field+setter+getter+Other LogicQ可以将一些共有的操作提取到父cMQ减代码?/SPAN>

3?SPAN style="FONT: 7pt 'Times New Roman'">  Business SeviceQ实C务逻辑Q在此?/SPAN>DAO?/SPAN>Logic Object完成业务操作?/SPAN>q里当用到DAOӞ只需?/SPAN>IOC注入Q真实对象由外界Q?/SPAN>Web容器调用Spring容器Q注入?/SPAN>

4?SPAN style="FONT: 7pt 'Times New Roman'">  ~写ActionQ将用户界面的操作映到Busibess service?/SPAN>

 

使用Spring MVC的具体配|:(x)

1?/SPAN>?/SPAN>web.xml?/SPAN>, 增加dispatcher的定义,配置?/SPAN>URL Mapping分发用户调用?/SPAN>

        <servlet>

           <servlet-name>action</servlet-name>

        <servlet-class>

org.springframework.web.servlet.DispatcherServlet

</servlet-class>

        <load-on-startup>1</load-on-startup>

        </servlet>

 

    <servlet-mapping>

            <servlet-name>action</servlet-name>

            <url-pattern>*.html</url-pattern>

    </servlet-mapping>

~写相应?/SPAN>action-servlet.xml

 

 

2、如果用了多个context文gQ?/SPAN>Spring的配|文Ӟ(j)Q则需要在Web.xml中进行配|,具体如下Q?/SPAN>

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>

/WEB-INF/applicationContext1.xml

/WEB-INF/applicationContext2.xml

</param-value>

</context-param>

   其位|在?/SPAN>sitemesh filter”之后,但是?/SPAN>filter-mapping之前?/SPAN>

 

3. 增加ContextLoaderListener.

       <listener>

          <listener-class>

org.springframework.web.context.ContextLoaderListener

</listener-class>

  </listener>

 

对照了Spring in action,那个讲的更好哦。从spring的基开始讲P很不错?/P>

jinfeng_wang 2005-03-01 17:39 发表评论
]]>
Spring利用dynamic proxy实现AOPhttp://www.aygfsteel.com/jinfeng_wang/archive/2005/02/20/1378.htmljinfeng_wangjinfeng_wangSun, 20 Feb 2005 14:17:00 GMThttp://www.aygfsteel.com/jinfeng_wang/archive/2005/02/20/1378.htmlhttp://www.aygfsteel.com/jinfeng_wang/comments/1378.htmlhttp://www.aygfsteel.com/jinfeng_wang/archive/2005/02/20/1378.html#Feedback0http://www.aygfsteel.com/jinfeng_wang/comments/commentRss/1378.htmlhttp://www.aygfsteel.com/jinfeng_wang/services/trackbacks/1378.html至于上面所说的动态代理,l你一个更单的说法Q比如Spring里的TransactionProxyFactoryBeanQ他是对支持事务理的一个代理FactoryBeanQ利用动态代理,q个cd以不依赖于具体的target 接口Q用户可以随意选择target 接口。也不需要用户再手工Ҏ(gu)自己的target 接口扩展一个TransactionProxyFactoryBean?q样的一个用到java.lang.reflect的动态代理机Ӟ使得用户需要编写的代码量大大减,也得整个框枉|用趋于一致。[/quote]


java代码: 

        <bean id="someObjectProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
        <property name="proxyInterfaces">   
                 <value>ISomeInterface</value> 
                </property>       
                <property name="target">           
                        <ref bean="someObject"/>       
                </property>       
                <property name="interceptorNames">           
                        <list>               
                                <value>lockMixinAdvisor</value>           
                    </list>       
                </property>   
        </bean>




我奇怪的是,既然有下面这个,
java代码: 


<bean id="someObjectProxy" class="org.springframework.aop.framework.ProxyFactoryBean">



那么E序代码中, 怎么可以q样写?
java代码: 


ISomeInterface someObjectProxy = (ISomeInterface) context
                .getBean("someObjectProxy");


注意Q这里返回的是ISomeInterface Q而且q个someObjectProxy 对象已经h了ILockQISomeInterface 的功能,q且在行现的完全和ISomeInterface 一致?

如果Spring的代码是预编译的Q那可以产生stub之类的,可这里是怎么实现的,人奇怪哦Q谁能解释一下么Q?

{案 Q?http://www.javajia.com/article.php?id=919


只是在这上面再封装的完美|了Q好好研Idynamic proxy的实现吧?/P>


此外Q还有这一D哦 Q)(j)

AOP的作用可以简单如下所_(d)(x)“在一个组件的前后加上一些固定的内容。?抛开AOP不说Q我们自己如果想要写q东西,无非两种方式Q一个是proxy实现Q然后在proxy的前后添加内容;q有一U就是template实现?
所以在我看来,数据库层的模板其实也是一U“AOP”?不知道有没hҎ(gu)有些意见和评qͼ



jinfeng_wang 2005-02-20 22:17 发表评论
]]>
Spring IDE的?/title><link>http://www.aygfsteel.com/jinfeng_wang/archive/2005/02/20/1372.html</link><dc:creator>jinfeng_wang</dc:creator><author>jinfeng_wang</author><pubDate>Sun, 20 Feb 2005 08:25:00 GMT</pubDate><guid>http://www.aygfsteel.com/jinfeng_wang/archive/2005/02/20/1372.html</guid><wfw:comment>http://www.aygfsteel.com/jinfeng_wang/comments/1372.html</wfw:comment><comments>http://www.aygfsteel.com/jinfeng_wang/archive/2005/02/20/1372.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jinfeng_wang/comments/commentRss/1372.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jinfeng_wang/services/trackbacks/1372.html</trackback:ping><description><![CDATA[<P>下蝲了spring ide, 其具体的使用Ҏ(gu)?/P> <H2>Usage </H2> <H2><A name=usage-fresh></A>Fresh Installation</H2> <OL> <LI>Add Spring Beans project nature <UL> <LI>select open project nodes in Eclipse resource navigatorQ?or JDT package explorer <LI> 在Eclipse的resource navigatorH口中打开目Q(或者在 JDT package explorerH口Q? <LI>activate context menu item "Add Spring Beans Project Nature" on selected projects -> these projects are now decorated with a small 'S' in the upper right corner (overwriting other decorators, e.g. Java project decorator 'J')  <LI>在所打开的项目中Q右键项目名Q选择“Add Spring Beans Project Nature”,q时该项目就?x)在右上角挂上了“S? :) </LI></UL> <LI>Add references to other Spring projects <UL> <LI>open project's properties dialog in Eclipse resource navigator or JDT package explorer  <LI> 右键目名,查看其properties,q就打开?project properties"H口 <LI>select the properties page "Project References" from the list  <LI> q时可以选择 "Project References"</LI></UL> <UL> <LI>select Spring project(s) containing Spring Beans config files which are referenced from within in this project's Spring Beans config sets  <LI>选择 所依赖引用的项?/LI></UL> <LI>Add Spring Beans factory config files <UL> <LI>open project's properties dialog in Eclipse resource navigator or JDT package explorer or via double-clicking a project in the Spring Beans view <LI>同样Q再ơ打开目的属性对话框Q或者也可以打开“Spring Beans View?q个H口可以在window->slow view里面打开) <LI>select the properties page "Spring Beans Project" from the list <LI>在项目的属性窗口中选择"Spring Beans Project" <LI>use button "Add..." to open a selector dialog and select all Spring Beans config files -> added Spring Beans config files are decorated with a small 'S' in the upper right corner <LI>通过“Add”按钮选择Spring配置文g? <LI>(optionally) combine config files into config sets with the second tab of the property page (use "New..." to create a new config set and select the config files; use "Move Up" and "Move Down" to change the order of the config files) </LI></UL> <LI>Open Spring Beans view <UL> <LI>select from within any of the added Spring Beans config files opened in an Eclipse editor the menu item "Navigate/Show In/Spring Beans" -> Spring Beans view is opened and the corresponding Spring Beans config file is selected in the view's model <LI> Double clicking on an entry in the view navigates to the corresponding location in the config file </LI></UL> <LI>Validate Spring Beans config file <UL> <LI>save any of the added Spring Beans config files from within an open Eclipse editor -> all errors occured during validation create a problem marker in Eclipse's task view <LI>保存Spring配置文gQ这时就可以看到错误?Q俺没有能够在taskH口中看刎ͼ但在Bean.xml文g的编辑窗口看CQ嘻嘻~~~Q? <LI>另外Q可以观察一?Spring beans"那个H口Q在其上面有三个按钮Q第三个?show in property sheet", q个功能不错哦,可以试一下。当然了Q直接看xml文g也是挺好的?/LI></UL></LI></OL> <P>6、非常好的一个功能,在Spring Beans那个H口中添加好你的Spring配置文g之后Q在其中右键你的配置文gQ选择“show graph”,it's such a wonderful function~~~~</P> <P>在线安装地址Q? <A >http://springframework.sourceforge.net/spring-ide/eclipse/updatesite/</A>.  </P> <P>注意哦,在安装的时候,一定要选“Spring framework?然后才可以装“Spring IDE?是Beans Configuration Support啦?</P> <P> </P><img src ="http://www.aygfsteel.com/jinfeng_wang/aggbug/1372.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jinfeng_wang/" target="_blank">jinfeng_wang</a> 2005-02-20 16:25 <a href="http://www.aygfsteel.com/jinfeng_wang/archive/2005/02/20/1372.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽԶ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʩ</a>| <a href="http://" target="_blank">ɫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Զ</a>| <a href="http://" target="_blank">¡</a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank">Ӫɽ</a>| <a href="http://" target="_blank">ͼʲ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ľ</a>| <a href="http://" target="_blank">ӽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˷</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ž</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ƹ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ĭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ԭ</a>| <a href="http://" target="_blank">Ȫ</a>| <a href="http://" target="_blank">Т</a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank">ʡ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>