背景:
现有基于SpringMVC的java web后端项目,原则上都是前后端分离的;
现由于特殊需求,为了做统一登录,我临时创建了一个jsp用于验证登录,在jsp中需要实例访问service或Mapper进行数据库访问。
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);
%>
网友评论