美文网首页
普通类调用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