栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring基于配置注入

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spring基于配置注入

基于配置文件的springIOC注入

前言: 在spring的学习中,依赖注入(ioc),面向切面编程(aop)是两个十分重要的知识点.正所谓spring的灵魂.

此处是通过用户登录案例实现ioc中依赖注入的其中一种方式–基于配置文件通过setter方法实现注入.

工具:idea+maven

一:使用idea创建maven项目:

1.项目目录结构如下:

二:导入项目所需的jar包(pom.xml).
  

    
      junit
      junit
      4.11
      test
    

    
      org.springframework
      spring-core
      5.3.11
    
    
      org.springframework
      spring-beans
      5.3.11
    
    
      org.springframework
      spring-expression
      5.3.11
    
    
      org.springframework
      spring-context
      5.3.11
    

    
      commons-logging
      commons-logging
      1.2
    
  

:只导入spring-context包maven也会根据依赖关系自动引入其他包,但是有版本限制就需要在配置文件中声明了.因为maven是声明优先.

三:编写代码. 1 数据准备:由于没有链接数据库,在此处通过一个类来模拟用户数据.

1.1 在top.shifuyouya.job.databasemodel包下创建数据库模拟类(UserDB),通过map集合存储多个用户.

package top.shifuyouya.job.databasemodel;

import top.shifuyouya.job.bean.User;

import java.util.HashMap;
import java.util.Map;


public class UserDB {
    private static Map userMap = new HashMap<>();
    static {
        userMap.put(1,new User(1,"张三","123"));
        userMap.put(2,new User(2,"李四","123"));
        userMap.put(3,new User(3,"王五","123"));
        userMap.put(4,new User(4,"小红","123"));
    }

    
    public Map getUserMap() {
        return userMap;
    }
}

2 在top.shifuyouya.job.bean包下创建用户实体类User:
package top.shifuyouya.job.bean;


public class User {
//    用户id
    private Integer uid;
//    用户名
    private String userName;
//    用户密码
    private String password;

    public User() {}

    public User(Integer uid, String userName, String password) {
        this.uid = uid;
        this.userName = userName;
        this.password = password;
    }

    public Integer getUid() {
        return uid;
    }

    public void setUid(Integer 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 + ''' +
                '}';
    }
}
3 编写持久层

3.1 在top.shifuyouya.job.dao包下编写用户持久层(UserDao).

其中包含一个login方法:

package top.shifuyouya.job.dao;


public interface UserDao {
    
    public boolean login(String userName,String password);
}

3.2 在top.shifuyouya.job.dao.impl下编写UserDao的实现类(UserDaoImpl).

package top.shifuyouya.job.dao.impl;

import top.shifuyouya.job.bean.User;
import top.shifuyouya.job.dao.UserDao;
import top.shifuyouya.job.databasemodel.UserDB;

import java.util.Map;


public class UserDaoImpl implements UserDao {
//    模拟的用户数据库
    UserDB userDB;
    User user;

    public void setUser(User user) {
        this.user = user;
    }

    public void setUserDB(UserDB userDB){
        this.userDB = userDB;
    }


    @Override
    public boolean login(String userName, String password) {
        Map userMap = userDB.getUserMap();
        for(Integer key:userMap.keySet()){
            user = userMap.get(key);
            if (user.getUserName().equals(userName) && user.getPassword().equals(password)){
                return true;
            }
        }
        return false;
    }
}

4 编写业务层

4.1 在top.shifuyouya.job.service包中编写业务接口(UserService)

其中包含一个罗login方法

package top.shifuyouya.job.service;


public interface UserService {
    public boolean login(String userName,String password);
}

4.2 在top.shifuyouya.job.service.impl包中编写Uservice的实现类(UserServiceImpl)

package top.shifuyouya.job.service.impl;

import top.shifuyouya.job.dao.UserDao;
import top.shifuyouya.job.service.UserService;


public class UserServiceImpl implements UserService {
    UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public boolean login(String userName, String password) {
        return userDao.login(userName,password);
    }
}

5 编写spring配置文件.

在resource目录下编写名为(aplicationContext.xml)的配置文件.

使用bean标签实例化各个bean类.

在需要注入参数的实例中通过property标签注入参数,其中name的值属性名.value的值是注入的参数,

ref的值是引用bean的名称或id.




    
    
    

        

        
    
    
        
    


6 编写测试类(使用junit)

在test/java目录下编写测试类(UserTest).

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import top.shifuyouya.job.service.UserService;



public class UserTest {
    @Test
    public void loginTest(){
        ApplicationContext application = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = (UserService) application.getBean("userService");

//        登录成功的数据
        String userName = "小红";
        String password = "123";

//        登录失败的数据
//        String userName = "小小";
//        String password = "123";

        if(userService.login(userName,password)){
            System.out.println(userName + "登录成功");
        }else{
            System.out.println("用户名或密码错误!");
        }
    }
}

:这里需要注意的是junit是自动化测试工具,所以测试数据不能使用Scanner类来获取用户主动输入.否则他会一转转圈圈,犹如进入了死循环.

7 测试结果:


:此处省略了controller层

完整的代码: https://gitee.com/cat_y/spring-study

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/754436.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号