• 如何将service绑入到spring 并且在action中使用


    第一步:定制 service接口,为什么用接口我也不清楚

    package com.inspur.services;

    import com.hsp.domain.User;

    public interface IaddService {
     public void addUser(User e);
    }

    第二步,实现service接口

    package com.inspur.services;
    import java.io.Serializable;
    import java.util.List;

    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.springframework.transaction.annotation.Transactional;

    import com.hsp.domain.User;

    //要是没有这个transactional将会导致如下错误:No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
    @Transactional
    public class AddUser implements IaddService {
    //注 这里的sf必须与在applicationContext.xml中的属性sf一致 

    private SessionFactory  sf;
     public SessionFactory getSf() {
      return sf;
     }
     public void setSf(SessionFactory sf) {
      this.sf = sf;
     }

     public void addUser(User e) {
      sf.getCurrentSession().save(e);
     }

    }

    第三步:在spring容器中部署(applicationContext.xml)

    <!-- 配置EmployeeService对象 -->
    <bean id="userSevice" class="com.inspur.services.AddUser">
     <property name="sf" ref="sessionFactory" />
    </bean>

    第四步:在action中使用

    package com.inspur.actions;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.actions.DispatchAction;
    import org.springframework.web.context.WebApplicationContext;
    import org.springframework.web.context.support.WebApplicationContextUtils;

    import com.hsp.domain.User;
    import com.inspur.forms.*;
    import com.inspur.services.AddUser;
    import com.inspur.services.IaddService;


    public class LoginAction extends DispatchAction {

    //注这里的userservice必须与applicationContext.xml中的配置的loginaction的属性userservice属性名字一致
     private IaddService userservice;
      public IaddService getUserservice() {
      return userservice;
     }

     public void setUserservice(IaddService userservice) {
      this.userservice = userservice;
     }

     public ActionForward add(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {
       System.out.println("******通过新的方式响应请求***********");
       /*
       
       EmployeeForm employeeForm=(EmployeeForm)form;
       //构建一个Employee对象
       Employee e=new Employee();
       e.setId(employeeForm.getId());
       e.setName(employeeForm.getName());
       e.setLeader(employeeForm.getLeader());
       e.setMid("111111");
       eif.addEmployee(e);
       request.getSession().setAttribute("adder", e);
       */
       User u=new User();
       u.setId(1);
       u.setName("wj");
       u.setPassword("123");
       userservice.addUser(u);
       return mapping.findForward("add");
      }

      //响应登录
      public ActionForward login(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {
       System.out.println("******通过新的方式响应请求***********");
       /*
       
       EmployeeForm employeeForm=(EmployeeForm)form;
       //构建一个Employee对象
       Employee e=new Employee();
       e.setId(employeeForm.getId());
       e.setName(employeeForm.getName());
       e.setLeader(employeeForm.getLeader());
       e.setMid("111111");
       eif.addEmployee(e);
       request.getSession().setAttribute("adder", e);
       */
       return mapping.findForward("ok");
      }
      
       
    }

    郑重补充:

      要想使用重量级工具最好用单例模式,可以通过spring的依赖注入实现这个问题,但是本例中LoginACtion以及AddUser使用了依赖注入后的对象sessionfactory,userservice,因此在类中必须做到变量名字与applicationContext.xml的一致,且用上一级的接口或者类来接受依赖注入后的对象。

      一般都会需要在applicationContext.xml中配置代理事物管理:

    <!-- 启用注解扫描 -->
    <context:annotation-config/>
    <!-- 配置事务管理器,统一管理sessionFactory的事务 -->
    <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
       <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    <!-- 启用事务注解 -->
    <tx:annotation-driven transaction-manager="txManager"/>

    然后在AddUser中添加@Transactional,由于使用了注解扫描,所以web容器会识别出AddUser使用了事物管理器以及事物注解。

  • 相关阅读:
    2021 省选颓记
    题解 UVA12459 Bees' ancestors
    题解 UVA10812 Beat the Spread!
    题解 UVA12230 过河 Crossing Rivers
    题解 P1850 [NOIP2016 提高组] 换教室
    题解 P1297 [国家集训队]单选错位
    CSP2020 游记
    学习笔记10-18
    【题解-SP1724 TRICOUNT】简单易懂的递推式写法
    题解:论如何利用 大 模 拟 吊打LGJ~
  • 原文地址:https://www.cnblogs.com/CooderIsCool/p/4721221.html
Copyright © 2020-2023  润新知