spring框架流程
创建maven java项目
先导入spring依赖
<!-- 添加Spring框架的核心依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api -->
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
将jdk版本改成计算机使用版本,通常使用的是11
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
将buil标签中的自带插件删除
<build>
删除
</build>
在main目录下新建一个资源resources
目录来放置配置文件,然后新建一个spring.xml
文件 并开启扫描
<!--开启扫描-->
<context:component-scan base-package="com.yjxxt"></context:component-scan>
项目的组成
在java文件下按下图新建包,此项目模拟的是用户登录操作
User是普通的javabean,属性有uname,password等,dao层是查询用户记录,service是业务逻辑处理,controller是控制层,接收请求。
package com.yjxxt.bean;
public class User {
private String username;
private String password;
public User() {
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
dao层处理
先处理dao层,因为是通过配置文件扫描所以类开头需要加注解@Repository
,
package com.yjxxt.dao;
import com.yjxxt.bean.User;
import org.springframework.stereotype.Repository;
@Repository
public class UserDao {
//设置用户名和密码来模拟数据库信息 因为是固定不变 所以用final修饰为常量
private final String USERNAME="admin";
private final String PASSWORD="admin";
//定义一个查询的方法 返回一个User对象 接收controller传来的用户输入的用户名
public User selectUserByName(String uname){
//先创建一个User对象 为null
User user =null;
//判断 如果用户名不一样则返回null 未查询到该用户名
if (!USERNAME.equals(uname)){
return null;
}
//程序到这里说明能查询到用户名 则将user创建并将存储的用户名和密码赋值给该对象,然后返回
user=new User();
user.setUsername(USERNAME);
user.setPassword(PASSWORD);
return user;
}
}
service层的处理
先创建一个vo包,然后定义一个MessageModel
javabean来记录逻辑处理后的信息,该JavaBean可以定义2个属性,一个是返回结果状态,一个是返回信息。
package com.yjxxt.vo;
public class MessageModel {
//返回状态 1 是成功 0是失败 默认状态是1
private Integer resultCode=1;
//该属性记录逻辑处理后的信息 默认值是成功
private String resultMsg="操作成功";
public MessageModel() {
}
public MessageModel(Integer resultCode, String resultMsg) {
this.resultCode = resultCode;
this.resultMsg = resultMsg;
}
public Integer getResultCode() {
return resultCode;
}
public void setResultCode(Integer resultCode) {
this.resultCode = resultCode;
}
public String getResultMsg() {
return resultMsg;
}
public void setResultMsg(String resultMsg) {
this.resultMsg = resultMsg;
}
@Override
public String toString() {
return "MessageModel{" +
"resultCode=" + resultCode +
", resultMsg='" + resultMsg + '\'' +
'}';
}
}
service对用户的数据进行逻辑处理
package com.yjxxt.service;
import com.yjxxt.bean.User;
import com.yjxxt.dao.UserDao;
import com.yjxxt.vo.MessageModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
//定义一个UserDao类型的属性 然后通过spring框架的注解Autowired 实现自动装配
@Autowired
private UserDao userDao;
//先创建一个MessageModel来接收逻辑处理后的信息
//定义一个方法来处理用户名 密码等信息 并将结果存入MessageModel返回
//需要传入用户输入的2个参数 用户名和密码
public MessageModel userLoginCheck(String uname,String pwd){
//先创建对象
MessageModel mm = new MessageModel();
//逻辑判断
//先判断用户名是否为空
if (uname==null || "".equals(uname)){
mm.setResultCode(0);
mm.setResultMsg("用户名不能为空");
//返回mm
return mm;
}
//再判断密码是否为空
if (pwd==null || "".equals(pwd)){
mm.setResultCode(0);
mm.setResultMsg("密码不能为空");
return mm;
}
//判断用户名是否正确
//通过dao层来查询该用户信息 存入一个中间变量
User temp = userDao.selectUserByName(uname);
//判断temp是否为null 如果是 则说明该用户数据库未存储过
if (temp==null){
mm.setResultCode(0);
mm.setResultMsg("用户不存在");
return mm;
}
//判断密码是否正确
//通过中间变量temp来获取从数据库中该用户名查询到的密码与本次用户输入的密码对比
if (!temp.getPassword().equals(pwd)){
mm.setResultCode(0);
mm.setResultMsg("密码不正确!");
return mm;
}
//用户名密码都正确,返回结果
return mm;
}
}
controller层
该层主要接收用户传入的数据,并传输给service逻辑层,然后等待逻辑层的 结果返回,然后再返回给用户
package com.yjxxt.controller;
import com.yjxxt.service.UserService;
import com.yjxxt.vo.MessageModel;
import org.springframework.stereotype.Controller;
//自动扫描 通过注解 可以定义名称
@Controller("uc")
public class UserController {
//定义逻辑层对象 并实现自动装配
@Autowired
private UserService userService;
//定义方法获取到逻辑层处理后的数据 将用户传入的用户名和密码作为参数传入
public MessageModel sayLogin(String uname,String pwd){
MessageModel messageModel = userService.userLoginCheck(uname, pwd);
return messageModel;
}
}
通过jutil进行测试
定义一个测试类来进行测试
package com.yjxxt.test;
import com.yjxxt.controller.UserController;
import com.yjxxt.vo.MessageModel;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestLogin {
//定义一个方法来测试 需要加注解@Test
@Test
public void test01(){
//先获取spring容器上下文
ApplicationContext app=new ClassPathXmlApplicationContext("spring.xml")
//通过getbean获取控制层的对象,
UserController uc = app.getBean("uc", UserController.class);
//调用控制层中的方法,并将测试的用户名和密码作为实参传入
MessageModel messageModel = uc.sayLogin("admin", "admin");
//将结果打印
System.out.println(messageModel);
}
}
@Test
public void test02(){
//先获取spring容器上下文
ApplicationContext app=new ClassPathXmlApplicationContext("spring.xml");
//通过getbean获取控制层的对象,
UserController uc = app.getBean("uc", UserController.class);
//调用控制层中的方法,并将测试的用户名和密码作为实参传入
MessageModel messageModel = uc.sayLogin("admin", "");
//将结果打印
System.out.println(messageModel);
}
@Test
public void test03(){
//先获取spring容器上下文
ApplicationContext app=new ClassPathXmlApplicationContext("spring.xml");
//通过getbean获取控制层的对象,
UserController uc = app.getBean("uc", UserController.class);
//调用控制层中的方法,并将测试的用户名和密码作为实参传入
MessageModel messageModel = uc.sayLogin("", "admin");
//将结果打印
System.out.println(messageModel);
}
@Test
public void test04(){
//先获取spring容器上下文
ApplicationContext app=new ClassPathXmlApplicationContext("spring.xml");
//通过getbean获取控制层的对象,
UserController uc = app.getBean("uc", UserController.class);
//调用控制层中的方法,并将测试的用户名和密码作为实参传入
MessageModel messageModel = uc.sayLogin("admin", "admin2");
//将结果打印
System.out.println(messageModel);
}
@Test
public void test05(){
//先获取spring容器上下文
ApplicationContext app=new ClassPathXmlApplicationContext("spring.xml");
//通过getbean获取控制层的对象,
UserController uc = app.getBean("uc", UserController.class);
//调用控制层中的方法,并将测试的用户名和密码作为实参传入
MessageModel messageModel = uc.sayLogin("admin1", "admin");
//将结果打印
System.out.println(messageModel);
}