Spring应用总结

 1.简单的Spring运用

    【第1步】配置Spring配置文件
     == applicationContext.xml ==

     <?xml version="1.0" encoding="UTF-8"?>
      <beans
 xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http:
        //www.springframework.org/schema/beans/spring-beans-2.0.xsd"
      >

         <bean id="loginbean" class="Service.LoginBean">   
         </bean>

     </beans>

     说明:Spring配置文件applicationContext.xml中就只有<bean>配置,从字面上去理解,就知道Spring是对Bean进行管理的,在上面
           是对Service包下的LoginBean.java进行托管,并且取逻辑名为loginbean。在程序中如果要创建LoginBean.java的对象的时候,
           可通过逻辑名创建。

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

     【第2步】定义接口
      == LoginInterface接口 ==

      public interface LoginInterface {

 public boolean verify(String username,String password);
 
      }

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

     【第3步】实现接口
      == LoginBean.java ==

       public class LoginBean implements LoginInterface {

 public boolean verify(String username,String password)//实现接口的方法
        {
           ...  ...  ...
 }
       }

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

      【第4步】在程序中通过Spring配置文件调用实现接口的类中的方法,进行逻辑运算
       == LoginAction.java ==

       import org.springframework.context.support.*;
       import org.springframework.context.ApplicationContext;

       import Service.LoginInterface;

       //Struts中的Action调用逻辑层的方法,进行逻辑处理
       public class LoginAction extends Action
       {
 
      public ActionForward execute(ActionMapping mapping, ActionForm form,
     HttpServletRequest request, HttpServletResponse response)
             {
                ...  ... ...

  ApplicationContext ctx=new FileSystemXmlApplicationContext("c://a//applicationContext.xml");//加载Spring文件
         LoginInterface bean=(LoginInterface)ctx.getBean("loginbean");//通过配置好的逻辑名创建Bean对象。(面向接口)
         boolean flag=bean.verify(username, password);//调用方法,进行逻辑运算

                ...  ...  ...
      }
       }

       说明:FileSystemXmlApplicationContext类的参数是Spring配置文件的绝对路径名;当通过逻辑名创建Bean对象的时候,使用接口
       LoginInterface去指向实现接口的对象。
      


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


2.在spring中对Bean的属性依赖注入

   ①给基本数据类型的属性注入值

      ...   ...   ...
      <bean id="loginbean" class="Service.LoginBean">
          <property name="i">
            <value>3</value>
          </property>
      </bean>
    
      说明:上面的定义相当于是创建了一个LoginBean.java的对象,应用名为loginbean,并且给loginbean的属性i,赋值为3。
      相当于:
      Service.LoginBean  loginbean=new  Service.LoginBean();
      loginbean.setI(3);
     
      注意:当<property name="i"  value="3"/>  时,程序会自动调用Service.LoginBean.java中的public void setI(int i)方法,
            所以,对于在Bean中每个属性必须要有GET,SET 方法。
            


   ②给类对象属性注入值

      ...   ...   ...
      <bean id="loginbean" class="Service.LoginBean">
          <property name="dao">
               <ref bean="logindao"/>
          </property>
      </bean>

      <bean id="logindao" class="dao.LoginDao"  singleton="false"></bean>

      说明:上面的定义还是相同,只是,这次赋值的属性不再是基本数据类型,而是实体Bean。
      相当于:

      dao.LoginDao  logindao=new  dao.LoginDao();

      Service.LoginBean  loginbean=new  Service.LoginBean();
      loginbean.setDao(logindao);
     
      注意:<property>的value属性没有了,而是采用了ref属性。value属性用于注入基本的数据类型值,而ref属性用于注入已经定义好的
      Bean。<property>还有另一个属性:singleton。当设置为false时,表示此类不是单态模式,默认的情况是true.

  

   ③给集合属性注入值

      ...   ...   ...
      <bean id="loginbean" class="Service.LoginBean">
          <property name="arrayList">
               <list>
                  <value>aa</value>
                  <value>aa2</value>
                  <value>aa3</value>
               </list>
          </property>
      </bean>

      说明:上面的定义相当于是创建了一个LoginBean.java的对象,应用名为loginbean,并且给loginbean的集合属性arrayList赋值。
      相当于:

      List list=new ArrayList();
      list.add("aa");
      list.add("aa2");
      list.add("aa3");

      Service.LoginBean  loginbean=new  Service.LoginBean();
      loginbean.setArrayList(list);
     

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

 

3.通过Spring与Struts的整合


  【第1步】修改Struts配置文件
    == struts-config.xml ==
   
    ...  ...  ...
    <action-mappings >
      <action  attribute="loginForm"  input="/login.jsp"  name="loginForm" path="/login" scope="request" >★1
         <forward name="success" path="/success.jsp" />
         <forward name="failure" path="/failure.jsp" />
      </action>
    </action-mappings>

   <controller>
       <set-property property="processorClass" value="org.springframework.web.struts.DelegatingRequestProcessor"/>★2
   </controller>

   <plug-in  className="org.springframework.web.struts.ContextLoaderPlugIn">★3
         <set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml" />★4
   </plug-in>
    ...  ...  ... 

   说明:
     ★1:这里和普通的Sturts配置一样的,但要把type配置去掉,因为,所有的Action都由Spring托管,所有,在这里不能指定具体的
          Action类。
     ★2:DelegatingRequestProcessor是Spring定义好的请求处理器委托类,所有的Action被调用前被执行。
     ★3:ContextLoaderPlugIn是Spring定义好的文本加载类,主要加载Sping的配置文件
     ★4:contextConfigLocation是ContextLoaderPlugIn的属性,这里是将Spring的配置文件加载到程序中,用ContextLoaderPlugIn类的
          contextConfigLocation属性去接收。


   附加:
   Struts配置文件的另一种配置:
  
    ...  ...  ...
    <action  attribute="loginForm"  input="/login.jsp"  name="loginForm" path="/login" scope="request"
                                                   type="org.springframework.web.struts.DelegatingActionProxy">★1
  
    ...  ...  ...

    <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
          <set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml" />
    </plug-in>

    ...  ...  ...

    说明:
     ★1:这里指定了具体的Action要处理的类,只不过这个Action是Spring扩展的DelegatingActionProxy类,这个类是Action的委托类。
     其他的都一样。
    
   
  ==================================================

    
   【第2步】修改Spring配置文件
    == applicationContext.xml ==   

    ...  ...  ...
    <bean name="/login" class="action.LoginAction">★1
          <property name="bean">
               <ref bean="loginbean"/>
          </property>
    </bean>
   
    <bean id="loginbean" class="Service.LoginBean">★2
          <property name="dao">
               <ref bean="logindao"/>
          </property>
    </bean>
    
    <bean id="logindao" class="dao.LoginDao"></bean>★3


    说明:
      ★1:这里是对Struts中的Action进行配置,注意:这里的name所配置的不是指Action类中的属性,而是指触发表单的名字,与Struts
           中的path属性相对应。当login表单触发事件时,将调用此配置好的LoginAction
      ★2:很明显这里是对逻辑层的Bean进行配置,主要作控制层action.LoginAction中的属性。
      ★3:这里是对数据层的Bean进行配置,主要作逻辑层Service.LoginBean中的属性

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

  
   【第3步】程序中的运用
    == LoginAction.java ==   

    这里要对应Spring中的配置
   
    ... ... .... .....

    package action;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import form.LoginForm;
    import Service.LoginInterface;

    public class LoginAction extends Action {

 private LoginInterface bean;//★★1
 
 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
  String username=loginForm.getUsername();
  String password=loginForm.getPassword();
  
  
     boolean flag=bean.verify(username, password);//★★2
     if(flag)
      return mapping.findForward("success");
     else  
  return mapping.findForward("failure");
 }

 public LoginInterface getBean()//★★3
    {
  return bean;
 }

 public void setBean(LoginInterface bean)//★★4
    {
  this.bean = bean;
 }
    }

    说明:
      这是个Action类,处理用户提交的请求,这里并没有对代码进行任何删减。
      ★★1这里是定义了一个私有的逻辑层的Bean  (注意,这里用的是接口)属性,★★3与★★4是这个私有Bean属性的setter方法,
      主要作用是方便Spring对Bean属性的注入与调用,★★2就是直接对逻辑层Bean中的方法直接调用。到这里就会发现了,
      逻辑Bean并没有通过new关键字去创建,而是通过Spring注入进来的,这样就降低了类与类之间的耦合度。

 


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

 

4.通过Spring与Hibernate的整合


   【第1步】导入HIBERNATE资源,将所有的hibernate都交给spring托管

    在Spring的配置文件中会生成以下配置:

       <!-- 指定数据源 -->
       <bean id="database"
  class="org.apache.commons.dbcp.BasicDataSource">★★1
  <property name="driverClassName">
   <value>com.mysql.jdbc.Driver</value>
  </property>
  <property name="url">
   <value>jdbc:mysql://localhost:3306/test</value>
  </property>
  <property name="username">
   <value>root</value>
  </property>
  <property name="password">
   <value>123</value>
  </property>
 </bean>
     


        <!-- 指定session工厂 -->
 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">★★2
  <property name="dataSource">
   <ref bean="database" />
  </property>
  <property name="hibernateProperties">★★3
   <props>
    <prop key="hibernate.dialect">
     org.hibernate.dialect.MySQLDialect
    </prop>
   </props>
  </property>
  <property name="mappingResources">★★4
   <list>
    <value>pack/Users.hbm.xml</value>
            </list>
  </property>
       </bean>


    说明:
      ★★1:BasicDataSource类是Spring封装的类,是对数据源的操作的一扩展,有了这个配置后,HIBERNATE就不必对数据源进行配置了。
             以上是链接MySql的数据库
      ★★2:LocalSessionFactoryBean类是session工厂的封装类,此类主要传递给Dao层的Bean作为Session的工厂。
      ★★3:hibernateProperties属性是Hibernate的 "方言",对应Hibernate中的配置
      ★★4:mappingResources是对应Hibernate中实体与表之间映射的配置文件

 


  
    【第2步】编写Dao层(数据访问层)
   
    编写UserDAO接口
    package dao;
    import po.Users;

    public interface UserDAO{
 public void add(Users user);//添加
        public void delete(Users user);//删除
        public void update(Users user);//修改
        public void select(Users user);//查询
    }

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

    编写UserDAOimpl类,添加增,删,改查方法。
    package dao;

    import po.Users;
    import org.springframework.orm.hibernate3.HibernateTemplate;
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;//★★HibernateDaoSupport封装了对数据库的操作

    public class UserDAOimpl extends HibernateDaoSupport implements UserDAO
    {
 public void add(Users user)//添加 {
    super.getHibernateTemplate().save(user);//★★调用父类的方法,进行数据的添加
    getHibernateTemplate().flush();
        }
 
        public void delete(Users user)//删除{
           super.getHibernateTemplate().delete(user);
           getHibernateTemplate().flush();
        }
   
        public void update(Users user)//修改{
           super.getHibernateTemplate().update(user);
           getHibernateTemplate().flush();
        }

        public void select(Users user)//查询{
           super.getHibernateTemplate().get(user.getClass(), 1);
           getHibernateTemplate().flush();
        }
    }


    【第3步】Spring配置,注入实体Bean
  

     ...  ...  ...

     <bean id="userDAO" class="dao.UserDAOimpl">
       <property name="sessionFactory">
         <ref local="sessionFactory" /> //★★给父类的属性赋值,这里是给Session工厂赋值
       </property>
     </bean>
  
     ...  ...  ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值