zoukankan      html  css  js  c++  java
  • spring1.2,2.0版本区别

    Spring中有一个IOC对象容器(Spring内部的一个HashMap容器),用于盛放对象的!

    Spring中全部生成的对象都放在IOC对象容器中的!是以name或id的值做键存在容器中的!

     

    给对象注入值的方式:---以下的4种全部都是交给Spring框架去注入的!

    1.       用不带参数的构造子依赖注入

    2.       Set依赖注入

    3.       带参数的构造子依赖注入

    4.       接口依赖注入

    5.       LookUp-Method(使用CGLIB的动态字节码增强功能)注入,重写方法!

    <ref bean="p3"/>---表示可以引用其他Xml中的Bean;

    <ref local="a"/>---local表示只能引用本Xml中的Bean;

    Spring中加载上下文的三种方式:

    ApplicationContext act=new ClassPathXmlApplicationContext(“applicationContext.xml”);

    Resource resource=new ClassPathResource("application.xml");

    ApplicationContext  act =  new  FileSystemXmlApplicationContext (“F:/绝对路径/application.xml”) ;

    Spring配置工厂Bean

    调用getBean(“工厂bean的id”)方法,Spring返回的不是直接创建的工厂Bean的实例,而是由工厂Bean创建的Bean实例(工厂bean生产的产品实例).

    Spring的IOC容器用于管理Struts和Hibernate

     SessionFactory和事务都是Hibernate中的东西,而不是Spring 的,Spring只是进行了封装,本质上是Hibernate的,Spring通过SpringORM封装了Hibernate

     

    注意:在使用Spring的时候,由Hibernate生成的影射文件中要取消指定的数据库名,否则查询数据库是要报错!

     

    ----------整合部分!

    四 Stirng1.2+Spring1.2+Hibernate3.1的整合(重点)

     

     

    1.        Struts1.2的配置文件: Struts-config.xml文件都是自动生成的!

      <action-mappings >

        <action

          attribute="userForm"  

          parameter="m"

          path="/user"

          name="userForm"

          type="org.springframework.web.struts.DelegatingActionProxy"—不同点就在这里,不是Action的包路径了,而是使用Spring的代理类交给Spring去创建Action的事例!让它享受Spring的服务

          validate="false">

          <forward name="user" path="/user.jsp"></forward>

         </action>

    </action-mappings>

      <message-resources parameter="org.tongying.www.ApplicationResources" />

    </struts-config>

     

     

     

    2.  Spring的配置文件 ApplicationContext.xml文件头文件自动生成

    <beans>

    <!--session工厂-->

    使用的事务和事务的管理都是用的Hibernate里面的东西,都在Spring.orm.hibernate3的下面

    <bean id="sf" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

         <property name="configLocation">

         <value>classpath:hibernate.cfg.xml</value>

         </property>

    </bean>

    <!--事务管理-->

    <bean id="tm" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

    <property name="sessionFactory" ref="sf"></property>

    </bean>

    配置的继承

    下面的配置可以使用配置继承的方法来减少Spring的配置泛滥

    先写个基础的代理,不指定target的代理目标,并且告诉Spring是抽象的不能使用,abstract=”true”!

    当建对于具体的目标的Bean的时候,继承上面的基础代理就可以了!parent=”baseProxy”

    再把target指定代理目标!

    <!--servicei代理-->这就是代理,可以在其中加工处理的!

    用事务拦截机的代理工厂Bean,针对业务层进行事务的监控--

    <bean id="basePoxy"  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

        <property name="transactionManager" ref="transactionManager"></property>

           <property name="transactionAttributes">

            <props>

                <prop key="insert*">PROPAGATION_REQUIRED</prop>

                <prop key="delete*">PROPAGATION_REQUIRED</prop>

                <prop key="update*">PROPAGATION_REQUIRED</prop>

                <prop key="save*">PROPAGATION_REQUIRED</prop>

                <prop key="merge*">PROPAGATION_REQUIRED</prop>

                根据不同的动作而执行事务!   

                <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>

            </props>

        </property>

    </bean>

     

    针对业务层进行事务的监控

    <bean id="userserviceproxy" parent="baseproxy">

        <property name="target" ref="userservicei"></property>     

    </bean>

    <!--daoimpl-->要使用SessionFactory查询持久层!

    <bean id="userdaoi" class="org.wllt.www.daoi.UserDaoi">

      <property name="sessionFactory" ref="sf"></property>

    </bean>

     

    <!--serviceimpl-->要使用Dao接口的数据

    <bean id="userservicei" class="org.wllt.www.servicei.UserServicei">

      <property name="dao" ref="userdaoi"></property>

    </bean>

     

    <!--Action-->要使用业务层的数据

    <bean name="/user" class="org.wllt.www.action.UserAction" singleton=”true”>--默认就是true

      <property name="userservice" ref="userservicePoxy"></property>

    但是不能直接来自于Servicei,因为在业务层需要事务,数据库才会生效!只有先用代理处理!

    </bean>

    </beans>

    3.Web.xml文件

    Struts1.2的配置文件自己会加载的但是Spring则要我们自己来写配置!

    ---上下文的加载Spring的配置文件!

    <context-param>     

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

           <param-value>classpath:applicationContext.xml</param-value>

     </context-param>

    ---Spring加载监听器

       <listener>     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

    </listener>

    注意:在整合的过程中,Springjar包和Hibernatejar包有许多的冲突,我们的处理方法是把Hibernate的兼容性先添加到项目中,让它可以帮我们产生配置文件和po影射文件,再移出全部的jar 包,把Hibernate的一个.jta拷到项目中就够使用了!。在和Struts2.0的整合过程中也是如此!(只不过还有一个Struts2Spring的插件.jar

    两个.jar包都是倒到项目的WebRoot下的Web-Inf下的lib下就可以了!

    Struts1.2Struts2.0配合Spring1.2时的区别:

    11.2Struts-config.xml中使用代理类来来把Action的事例交给Spring

    org.springframework.web.struts.DelegatingActionProxy

         2.0中是在Actions.xml中使用class=”ActionSpring 中的id

     (2)1.2Application中定义Action是使用的name=”/useraction”

    2.0 -------------------------------  id=”useraction”  

     (3)2.0struts.xml中使用了<constant name="struts.objectFactory" value="spring"/>

    4web.xml都是一样的!

    五.Struts2.0+Spring1.2+Hibernate3.1的整合!

    1.自己建actions.xml文件

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

    <!DOCTYPE struts PUBLIC

        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

        "struts-2.0.dtd">  

     <struts>

        <package name="one" namespace="/one" extends="struts-default">

     

        <!--利用class="useraction"到Spring容器中去找生成的对象-->

        <action name="user" method="list" class="useraction">-原来是action的包路径,Spring整合不同

         <result name="user">/user.jsp</result>

            </action>     

        </package>

     </struts>

    2.自己建struts.xml文件

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

    <!DOCTYPE struts PUBLIC

        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

        "struts-2.0.dtd">

       

        <struts>

          <constant name="struts.devMode" value="true" />

          <constant name="struts.locale" value="zh_CN" /> 

          <constant name="struts.i18n.encoding" value="GBK" />

          <constant name="struts.action.extension" value="action,itfuture,do"/>

         

          <!--利用Struts2到Spring的插件把Struts和Spring联系起来 -->[不用也可以]

         <constant name="struts.objectFactory" value="spring"/>

          <!--加载了action.xml-->

          <include  file="actions.xml"/>

    </struts>

    3.Spring中的applicationContext.xml文件

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

    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

    <beans>

    <!--SessionFactory-->

       <bean id="sf" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

           <property name="configLocation">

           <value>classpath:hibernate.cfg.xml</value>

           </property>

       </bean>

    <!--事务的管理-->

       <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

            <property name="sessionFactory" ref="sf"></property>

       </bean> 

    <!--serviceiproxy用事务拦截机的代理工厂Bean,针对业务层进行事务的监控,可以先做成代理的一个模版(其他的地方引用即可!)-->

    <bean id="baseproxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

         <property name="transactionManager" ref="transactionManager"></property>

         //去掉--<property name="target" ref="servicei"></property>--//

         <property name="transactionAttributes">

             <props>  

                <prop key="save*">PROPAGATION_REQUIRED</prop>

                <prop key="delete*">PROPAGATION_REQUIRED</prop>

                <prop key="update*">PROPAGATION_REQUIRED</prop>   

                <prop key="insert*">PROPAGATION_REQUIRED</prop>

                <prop key="merge*">PROPAGATION_REQUIRED</prop>

                

                <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>

             </props>

         </property>

    </bean>

    此处引用定义代理(都可以适用的,部分什么版本的配合!)

    <bean id="deptserviceiproxy" parent="baseproxy">

        <property name="target" ref="deptservicei"></property>

    </bean>

     

    <!--daoimpl-->   

    <bean id="daoi" class="org.wllt.www.daoi.UserDaoi">

      <property name="sessionFactory" ref="sf"></property>

    </bean>

     

    <!--serviceimpl-->

        <bean id="servicei" class="org.wllt.www.servicei.UserServicei">

            <property name="dao" ref="daoi"></property>

    </bean>

     

    <!--action-->

        <bean id="useraction" class="org.wllt.www.action.UserAction" singleton=”true”>

        <property name="service" ref="serviceproxy"></property>

        </bean>   

    </beans>

    LookUp(利用CGLIB增强技术完成)

    <lookup-method name=”方法名” bean=”返回类型”>

    六.Spring2.0的使用!

    (Struts2.0+Spring2.0+Hibernate3.1

    1.       Spring2.0完全向下兼容Spring1.2,代码不经过改动就可以运行项目!

    2.       Spring1.2Spring2.0的区别在哪里?

    区别就是在applicationContext.xml的文件中!(在.jar包里有)

    a.头文件不同1.2是.dtd规则,而2.0是.xsd规则

    b.下面的<action>配置单态性不同!

    <!--action-->

      <!--spring2.0用scope="singleton/prototype"替代spring1.2中的singleton="true/false"-->

      <bean id="deptAction" class="org.itfuture.www.actions.DeptAction" scope="prototype">

         <property name="service" ref="deptserviceiproxy"></property>

      </bean>

  • 相关阅读:
    ios app: 使用企业license设置发布app的过程
    gtest测试代码编写思想
    受尽侮辱的语言
    创业者的思维误区---《精益创业》
    session的取代者:Json Web Tokens----在客户端存储登陆状态
    lineman 的理念与 modern web app
    angularjs框架及其生态环境 --待续
    javascript的崛起及其生态元素
    Cassandra 2.x 提示“错误: 代理抛出异常错误: java.lang.NullPointerException”
    cassandra运行出现了Unable to gossip with any seeds,cqlsh链接不上,提示connection refused处理办法
  • 原文地址:https://www.cnblogs.com/kentyouyou/p/3358621.html
Copyright © 2011-2022 走看看