Java框架技术:Spring的IOC使用

实验目的:

  1. 掌握Spring的IOC操作,能够实现MVC层次的基于IOC的调用
  2. 掌握Spring的IOC的注解使用

实验内容:

在计算机上实现模拟查询学生成绩的操作,要求如下:

(1)构建User类和Student类,模拟数据库中的两个表,类属性如下:

A.Student类,属性(sid,sname,sex,age)

B.User,属性(uid,username,password)

(2)假设User类所对应的方法是login(username,password)和registry(username,password)完成该类中的这个方法在dao层的接口和实现类,以及service层的接口和实现类,注意,dao的实现类中,该登录方法的实现直接使用集合查询数据,注册方法直接往集合里面加入新用户即可,不用查询数据库,在service层的实现类则是直接调用dao层的方法即可;

(3)假设Student类所对应的方法是查询所有学生信息(List<Student> findStudent())以及根据id查询学生信息(Student findStudentById(int id))以及根据名字模糊查找学生信(List<Student> findStudentByName(String name))这三个方法,完成这三个方法在dao和service层的构建以及调用关系,实际student数据不用查数据库,我们直接在dao里面构建一个student的集合并自己初始化数据即可;

(4)提供JUnit单元测试,使用Scanner类来完成控制台的输入指令:1.用户登录,2.用户注册,3.退出,当用户登录成功之后,开始有新指令:1.查找所有学生、2.根据id查找学生、3.根据学生姓名查找学生;完成以上5个功能;

实现思路:

项目结构图:

1、引入先关依赖到 pom.xml中:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.spring</groupId>
    <artifactId>spring</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!--Spring必备的支持包-->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
        <!--Spring-->
        <!--Spring的基础包Spring-core-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>
        <!--Spring的基础包Spring-beans-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>
        <!--Spring的基础包Spring-context-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>
        <!--Spring的基础包Spring-expression-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>
        <!--Spring的基础包Spring-aop-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-annotations-api</artifactId>
            <version>9.0.8</version>
        </dependency>
    </dependencies>


</project>
2、Spring IOC 的配置和实现
2.1:配置Spring的IOC容器

创建Spring配置文件applicationContext.xml或使用注解配置。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans.xsd
	http://www.springframework.org/schema/context
	https://www.springframework.org/schema/context/spring-context.xsd">
    <!--将指定类配置给spring,让Spring创建User对象实例-->
    <context:component-scan base-package="com.spring"/>
</beans>
2.2:创建User类和Student类

创建User类,包含属性uid, username, password。

package com.spring.pojo;

import org.springframework.stereotype.Component;

@Component("user")
public class User {
    private int uid;
    private String username;
    private String password;

    public User(){

    }

    public User(int uid, String username, String password) {

        this.uid = uid;
        this.username = username;
        this.password = password;
    }

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    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{" +
                "uid=" + uid +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

创建Student类,包含属性sid, sname, sex, age。

package com.spring.pojo;

public class Student{
    private int sid;
    private String sname;
    private String sex;
    private int age;

    public Student(int sid,String sname,String sex,int age){
        this.sid=sid;
        this.sname=sname;
        this.sex=sex;
        this.age=age;
    }
    public Student() {

    }

    public int getSid() {
        return sid;
    }

    public void setSid(int sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "sid=" + sid +
                ", sname='" + sname + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                '}';
    }
}
2.3:实现DAO层接口和实现类

创建UserDao接口,定义 login 和 registry 方法。

package com.spring.common.dao;

public interface UserDao {
    void login();

    void register();
}

创建UserDaoImpl实现类,实现 login 和 registry 方法,使用集合模拟数据库操作。

package com.spring.common.dao.Impl;

import com.spring.common.dao.UserDao;
import com.spring.pojo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Repository;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

@Repository("userDao")
public class UserDaoImpl implements UserDao {
    User user;
    static List<User>userList = new ArrayList<User>();
    static User user1 = new User(1,"张三","123456");
    static Scanner sc = new Scanner(System.in);
    static int uid = 1;

    static {
        if(userList.isEmpty()){
            userList.add(user1);
        }
    }
    @Override
    public void login() {
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        System.out.println("请输入用户名:");
        String username = sc.nextLine();
        System.out.println("请输入密码:");
        String password = sc.nextLine();

        for(User user:userList){

            if(username.equals(user.getUsername()) && password.equals(user.getPassword())){
                System.out.println("登录成功" + "\n");
                return;
            }
            else {
                System.out.println("用户名或密码错误" + "\n");
                return;
            }
        }
    }

    @Override
    public void register() {
        System.out.println("请输入用户名:");
        String username = sc.nextLine();
        System.out.println("请输入密码:");
        String password = sc.nextLine();
        uid += 1;
        User newUser = new User(uid,username,password);
        userList.add(newUser);
        System.out.println("注册成功" + "\n");
        for (User user:userList){
            System.out.println(user);
        }
    }
}

创建StudentDao接口,定义findStudent, findStudentById, findStudentByName方法。

package com.spring.common.dao;

public interface StudentDao {
    void FindStudent();

    void FindStudentById();

    void FindStudentByName();
}

创建StudentDaoImpl实现类,实现上述方法,使用集合模拟数据库操作并初始化数据。

package com.spring.common.dao.Impl;

import com.spring.common.dao.StudentDao;
import org.springframework.stereotype.Repository;
import com.spring.pojo.Student;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@Repository("studentDao")
public class StudentDaoImpl implements StudentDao {
    Student student;
    static List<Student> studentList = new ArrayList<Student>();
    static  Student student1 = new Student(1,"萧炎","男",20);
    static  Student student2 = new Student(2,"林黛玉","女",18);
    static  Student student3 = new Student(3,"萧玄","男",22);
    static  Student student4 = new Student(4,"魂天帝","男",21);
    static  Student student5 = new Student(5,"林月如","女",20);
    static  Student student6 = new Student(6,"林青霞","女",25);
    static  Student student7 = new Student(7,"林长生","男",21);

    static {
        if (studentList.isEmpty()){
            studentList.add(student1);
            studentList.add(student2);
            studentList.add(student3);
            studentList.add(student4);
            studentList.add(student5);
            studentList.add(student6);
            studentList.add(student7);

        }
    }

    @Override
    public void FindStudent(){
        for(Student student:studentList) {
            System.out.println(student);
        }
    }

    @Override
    public void FindStudentById(){
        System.out.println("请输入您要查询的学生的id:");
        Scanner sc = new Scanner(System.in);
        int id = sc.nextInt();
        boolean flag = true;

        for(Student student:studentList) {

            if(id == student.getSid()) {
                System.out.println(student);
                flag = false;
                break;
            }
        }

        if(flag) {
            System.out.println("没有找到该学生");
        }

    }
    @Override
    public void FindStudentByName(){
        System.out.println("请输入您要查询的学生的姓名:");
        Scanner sc = new Scanner(System.in);
        String name = sc.next();
        Pattern pattern = Pattern.compile(name,Pattern.CASE_INSENSITIVE);
        for(Student student:studentList) {
            Matcher matcher = pattern.matcher(student.getSname());
            if(matcher.find()) {
                System.out.println(student);
            }
        }

    }

}
2.4:实现Service层接口和实现类

创建UserService接口,定义用户相关操作的方法。

package com.spring.service;

public interface UserService {
    void login();

    void register();
}

创建UserServiceImpl实现类,注入UserDao,实现业务逻辑。

package com.spring.service.Impl;

import com.spring.common.dao.UserDao;
import com.spring.service.UserService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class UserServiceImpl implements UserService {
    @Resource
    private UserDao userDao;

    @Override
    public void login(){
        this.userDao.login();
    }
    @Override
    public void register(){
        this.userDao.register();
    }
}

创建StudentService接口,定义学生信息相关操作的方法。

package com.spring.service;

public interface StudentService {
    void FindStudent();
    void FindStudentById();

    void FindStudentByName();
}

创建StudentServiceImpl实现类,注入StudentDao,实现业务逻辑。

package com.spring.service.Impl;

import com.spring.common.dao.StudentDao;
import com.spring.service.StudentService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service("studentService")
public class StudentServiceImpl implements StudentService {
    @Resource
    StudentDao studentDao;
    public void FindStudent() {
        this.studentDao.FindStudent();
    }
    @Override
    public void FindStudentById() {
        this.studentDao.FindStudentById();
    }
    @Override
    public void FindStudentByName() {
        this.studentDao.FindStudentByName();
    }

}
3、JUnit单元测试和Scanner输入指令
3.1:编写JUnit单元测试

编写SpringTest测试类,使用Spring的Test框架进行单元测试。

import com.spring.service.StudentService;
import com.spring.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.Scanner;

public class SpringTest {
    // 测试类
    public static void main(String[] args){
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = ac.getBean("userServiceImpl", UserService.class);
        StudentService studentService = ac.getBean("studentService", StudentService.class);
        Scanner sc = new Scanner(System.in);
        System.out.println("请选择功能:");
        System.out.println("1.用户登录");
        System.out.println("2.用户注册");
        System.out.println("0.退出");
        int choice = sc.nextInt();

        switch (choice){
            case 1:
                System.out.println("************登录功能************");
                userService.login();
                Scanner sc1 = new Scanner(System.in);
                System.out.println("请选择功能:");
                System.out.println("1.查询所有学生信息");
                System.out.println("2.根据id查询学生信息");
                System.out.println("3.根据名字查找学生信息");
                int choice1 = sc.nextInt();

                switch (choice1){
                    case 1:
                        studentService.FindStudent();
                        break;
                    case 2:
                        studentService.FindStudentById();
                        break;
                    case 3:
                        studentService.FindStudentByName();
                        break;
                    default:
                        return;
                }

                break;

            case 2:
                System.out.println("************注册功能************");
                userService.register();
                break;
            default:
                System.out.println("************退出成功************");
                return;
        }
    }
}
3.2:实现控制台输入指令

用户登录功能和查找所有学生信息功能:

用户注册功能:

退出功能:

根据 id 查找学生:

根据名字查找学生:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值