美文网首页
普通类调用Service,Dao对象方法

普通类调用Service,Dao对象方法

作者: 愤怒的阿昆达 | 来源:发表于2020-06-23 13:57 被阅读0次

    背景:

    现有基于SpringMVC的java web后端项目,原则上都是前后端分离的;
    现由于特殊需求,为了做统一登录,我临时创建了一个jsp用于验证登录,在jsp中需要实例访问service或Mapper进行数据库访问。

    如图: image.png
    service:
    image.png

    mapper:


    image.png

    解决方式1(没行通):

    1.使用ClassPathXmlApplicationContext获取service,调用getUserByLogin();

    <%@ page import="com.cnmts.system.bean.User" %>
    <%@ page import="org.springframework.context.support.ClassPathXmlApplicationContext"%>
    <%@ page import="com.cnmts.system.service.UserService"%>
    
            //TODO 用户登录
            ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
            UserService userService = (UserService)ctx.getBean("userService");
            User userFromDB = userService.getUserByLogin(userName,password);
    

    需要配置:applicationContext.xml,添加userService bean

    <?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.xsd">
    
        <bean id="userService" class="com.cnmts.system.service.UserService">
        </bean>
    
    </beans>
    

    方式1的结果:

    如图,debug到service时, Autowired注入的userMapper为null,未注入成功


    image.png

    解决方式2(可行):

    思路:创建工具类调用Service或Dao对象方法。
    具体:
    1.创建InitServiceUtil工具类,将工具类注入spring容器管理(使用@Component);
    2.使用@Resource或@Autowired注解Service,Dao对象;
    3.声明本身工具类成员;
    4.为了通过工具类成员调用Service,Dao对象,需要初始化工具类(
    (1).@PostConstruct注解初始化函数,在spring容器启动时执行给自身工具类成员赋值;
    (2).在spring.xml中配置一个bean;
    网上很多资料说二者只需要执行一个,我刚开始只选择了第一种,然后一直报null,最后我把第二种同时加上之后,成功了。所以两个都加上吧。
    );
    5.调用Service,Dao的方法(通过自身工具类成员调用:initServiceUtil.userMapper.getUserByLogin())。

    源码:

    InitServiceUtil工具类源码:

    package com.cnmts.util;
    
    import com.cnmts.system.bean.User;
    import com.cnmts.system.dao.UserMapper;
    import org.apache.ibatis.annotations.Param;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    import javax.annotation.PostConstruct;
    
    @Component
    public class InitServiceUtil {
    
        @Autowired
        private UserMapper userMapper;
    
        public static InitServiceUtil initServiceUtil;
    
        @PostConstruct
        public void init(){
            initServiceUtil = this;
        }
    
        public static User getUserByLogin(@Param("loginName") String loginName, @Param("loginPassword") String loginPassword){
            return initServiceUtil.userMapper.getUserByLogin(loginName,loginPassword);
        }
    
        public static void main(String[] args) {
            String loginName = "zs";
            String loginPassword = "123";
            User u = initServiceUtil.userMapper.getUserByLogin(loginName,loginPassword);
            System.out.println("u:"+u.toString());
        }
    
    }
    
    

    auth_login.jsp:

    <%@ page import="com.cnmts.util.InitServiceUtil" %>
    
    <%
    User userFromDB = InitServiceUtil.getUserByLogin(userName,password);
    %>
    

    相关文章

      网友评论

          本文标题:普通类调用Service,Dao对象方法

          本文链接:https://www.haomeiwen.com/subject/qzncfktx.html