spring基于配置注入

2023-05-16

基于配置文件的springIOC注入

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

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

工具:idea+maven

一:使用idea创建maven项目:

1.项目目录结构如下:

在这里插入图片描述

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


  <dependencies>
<!--    引入测试工具-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
<!--    引入spring核心容器所需的jar包-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>5.3.11</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>5.3.11</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>5.3.11</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.3.11</version>
    </dependency>
<!--  日志依赖的jar包-->
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
    </dependency>
  </dependencies>

:只导入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;

/**
 * 创建时间 2022/3/5
 * 描述:模拟用户数据表
 *
 * @author yanfuyou
 */
public class UserDB {
    private static Map<Integer,User> 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"));
    }

    /**
     *
     * @return 返回所有用户数据
     */
    public Map<Integer, User> getUserMap() {
        return userMap;
    }
}

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

/**
 * 创建时间 2022/3/5
 * 描述:用户实体
 *
 * @author yanfuyou
 */
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;

/**
 * 创建时间 2022/3/5
 * 描述:用户持久层
 *
 * @author yanfuyou
 */
public interface UserDao {
    /**
     * 功能:用户登录
     * @param userName 用户名
     * @param password 密码
     * @return 是否成功
     */
    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;

/**
 * 创建时间 2022/3/5
 * 描述:
 *
 * @author yanfuyou
 */
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<Integer, User> 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;

/**
 * 创建时间 2022/3/5
 * 描述:用户service层
 *
 * @author yanfuyou
 */
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;

/**
 * 创建时间 2022/3/5
 * 描述:
 *
 * @author yanfuyou
 */
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.

<?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-->
    <bean id="userdb" class="top.shifuyouya.job.databasemodel.UserDB"></bean>
    <bean id="user" class="top.shifuyouya.job.bean.User"></bean>
    <bean id="userDao" class="top.shifuyouya.job.dao.impl.UserDaoImpl">
<!--        传入模拟数据-->
        <property name="userDB" ref="userdb"></property>
<!--        用户实体类-->
        <property name="user" ref="user"></property>
    </bean>
    <bean id="userService" class="top.shifuyouya.job.service.impl.UserServiceImpl">
        <property name="userDao" ref="userDao"></property>
    </bean>

</beans>
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;


/**
 * 创建时间 2022/3/5
 * 描述:用户测试嘞
 *
 * @author yanfuyou
 */
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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring基于配置注入 的相关文章

  • 7-6 统计字母出现的次数 (20 分)

    7 6 统计字母出现的次数 20 分 从键盘输入一行只有小写英文字母的字符串 xff0c 用回车结束输入 统计26个英文字母出现的次数并依次输出 字符串长度不超过100个字符 输入格式 一行只有小写英文字母的字符串 xff0c 用回车结束输
  • 使用springmvc配置servlet

    使用springmvc配置servlet 文章目录 使用springmvc配置servlet将springmvc引入系统设置web xml设置配置springmvc的相关文件 新建controller包配置log4j配置网页 xff08 略
  • 实习面经分享 | 毫无面试经验的人该怎么去面试

    最近上网的时候 xff0c 看到很多24届的同学已经面了字节 蚂蚁 阿里云这些大厂的暑期实习 xff0c 大家还是非常优秀的 xff0c 也想到了自己去年找实习的点点滴滴 接下来打算分享一下下 本文内容主要分享一下当初我在准备暑期实习的时候
  • 实习面经分享 | 阿里云面试经验分享

    文章目录 实习面经分享 阿里云面试经验分享阿里云 后端开发 实习一面 xff1a 二面 xff1a hr面 xff1a 心得 xff1a 实习面经分享 阿里云面试经验分享 最近上网的时候 xff0c 看到很多24届的同学已经面了字节 蚂蚁
  • 实习面经分享 | 蚂蚁面试经验分享

    文章目录 实习面经分享 蚂蚁面试经验分享支付宝 后端开发 实习技术一面 xff1a 技术二面 xff1a 心得 xff1a 实习面经分享 蚂蚁面试经验分享 最近上网的时候 xff0c 看到很多24届的同学已经面了字节 蚂蚁 阿里云这些大厂的
  • DataWhale数据分析第三章模型建立和评估--评价

    第三章 模型搭建和评估 评估 根据之前的模型的建模 xff0c 我们知道如何运用sklearn这个库来完成建模 xff0c 以及我们知道了的数据集的划分等等操作 那么一个模型我们怎么知道它好不好用呢 xff1f 以至于我们能不能放心的使用模
  • 国企深度揭秘 | 移动总部网络事业部

    文章目录 国企深度揭秘 移动总部网络事业部1 公司情况2 招聘岗位3 招聘流程4 投递方式5 主观评价6 薪资待遇7 面经分享一面 xff1a 二面 xff1a 国企深度揭秘 移动总部网络事业部 大家好呀 xff0c 这里是小黛 最近想做这
  • ACM模式输入输出攻略 | C++篇

    文章目录 ACM模式输入输出攻略 C 43 43 篇1 核心代码模式与ACM模式2 C 43 43 常用的输入输出方法2 1 输入 xff08 1 xff09 cin xff08 2 xff09 getline xff08 3 xff09
  • 简历撰写攻略 | 互联网和国企的简历该怎么写,有何不同?

    文章目录 简历撰写攻略 互联网和国企的简历该怎么写 xff0c 有何不同 xff1f 1 写好简历是至关重要的2 如何写简历2 1 关于格式2 2 关于内容 3 总结 简历撰写攻略 互联网和国企的简历该怎么写 xff0c 有何不同 xff1
  • 自我介绍保姆级教学

    文章目录 自我介绍保姆级教学1 自我介绍的重要性2 自我介绍的形式和考察点3 如何进行自我介绍4 小结 自我介绍保姆级教学 大家好 xff0c 这里是小黛 xff01 今天打算来讲讲在面试中的第一关 xff0c 自我介绍 xff01 本文将
  • 国企央企OFFER收割全攻略 | 银行篇之行业整体介绍

    国企央企OFFER收割全攻略 银行篇之行业整体介绍 大家好 xff0c 这里是小黛 最近完成了一些工作上的事情 xff0c 因此更新推迟了一些 这篇银行求职全攻略 xff0c 千呼万唤始出来 xff0c 耗费了小黛非常非常非常多的心血 xf
  • 国企央企OFFER收割全攻略 | 银行篇之银行投递

    国企央企OFFER收割全攻略 银行篇之银行投递 大家好 xff0c 这里是小黛 最近完成了一些工作上的事情 xff0c 因此更新推迟了一些 这篇银行求职全攻略 xff0c 千呼万唤始出来 xff0c 耗费了小黛非常非常非常多的心血 xff0
  • 国企央企OFFER收割全攻略 | 银行篇之性格测评

    文章目录 国企央企OFFER收割全攻略 银行篇之性格测评3 性格测评3 1 考察内容3 2 题型3 3 注意事项 小结 国企央企OFFER收割全攻略 银行篇之性格测评 大家好 xff0c 这里是小黛 最近完成了一些工作上的事情 xff0c
  • 国企央企OFFER收割全攻略 | 银行篇之笔试

    文章目录 国企央企OFFER收割全攻略 银行篇之笔试4 笔试4 1 银行笔试的考察内容与题型4 2 不同银行笔试的侧重点4 3 如何准备银行笔试4 4 笔试的注意事项 小结 国企央企OFFER收割全攻略 银行篇之笔试 大家好 xff0c 这
  • 技术面面试高频考点总结-C++篇

    文章目录 技术面面试高频考点总结 C 43 43 篇一 C 43 43 常考考点枚举二 C 43 43 基础推荐学习资料三 小结 技术面面试高频考点总结 C 43 43 篇 大家好呀 xff0c 这里是小黛 xff01 在技术面面试中 xf
  • 国企央企OFFER收割全攻略 | 银行篇之面试

    文章目录 国企央企OFFER收割全攻略 银行篇之面试5 面试5 1 银行面试的考察内容与考察形式5 2 不同银行面试的面试内容5 3 银行面试流程与常考问题5 4 如何准备银行面试5 5 面试的注意事项 小结 国企央企OFFER收割全攻略
  • 基于机器学习的城市暴雨量预测

    背景 通过深圳气象局观测到的雷达图数据 xff0c 每个雷达图覆盖一个目标地点及其周边地区 xff0c 标记为m m网格 xff0c 其中每个网格点记录的是雷达反射率因子值z 这里Z值可以从非常小的数值到大的值 xff0c 为方便起见 xf
  • 国企央企OFFER收割全攻略 | 银行篇之差额体检&答疑

    文章目录 国企央企OFFER收割全攻略 银行篇之差额体检 amp 答疑6 体检6 1 体检是差额体检 xff0c 是招聘的一个环节6 2 体检的流程6 3 体检的注意事项 7 答疑8 结束语题外话 国企央企OFFER收割全攻略 银行篇之差额
  • 技术面面试高频考点总结-Redis篇

    文章目录 技术面面试高频考点总结 Redis篇一 Redis常考考点枚举二 Redis推荐学习资料三 小结 技术面面试高频考点总结 Redis篇 大家好呀 xff0c 这里是小黛 xff01 Redis是目前非常火的 xff0c 完全开源的
  • HR面与反问环节考点总结

    文章目录 HR面与反问环节考点总结1 HR面1 1 HR面的重要性与注意事项1 2 HR面常考问题枚举 2 反问2 1 反问是什么2 2 反问都问些什么 小结题外话 HR面与反问环节考点总结 大家好呀 xff0c 这里是小黛 xff01 本

随机推荐

  • 技术面面试高频考点总结-Linux篇

    技术面面试高频考点总结 Linux篇 大家好呀 xff0c 这里是小黛 xff01 Linux是一种类Unix操作系统 xff0c 是由芬兰的林纳斯 托瓦兹 xff08 Linus Torvalds xff09 在1991年首次发布 Lin
  • 技术面面试高频考点总结-操作系统篇

    技术面面试高频考点总结 操作系统篇 文章目录 技术面面试高频考点总结 操作系统篇一 操作系统必考考点列举二 操作系统推荐学习资料三 小结题外话 大家好呀 xff0c 这里是小黛 xff01 操作系统也是在面试中必考的内容 xff0c 那今天
  • 面试高频考点总结-云原生、微服务、K8s、分布式

    文章目录 技术面面试高频考点总结 云原生篇一 云原生简介二 云原生面试考题列举三 小结题外话 技术面面试高频考点总结 云原生篇 大家好呀 xff0c 这里是小黛 xff01 之前的文章呀 xff0c 也介绍了大部分计算机基础相关的八股文 x
  • 技术面面试高频考点总结-JAVA篇

    文章目录 技术面面试高频考点总结 JAVA篇一 Java基础二 JVM三 并发四 框架五 小结题外话 技术面面试高频考点总结 JAVA篇 大家好呀 xff0c 这里是小黛 xff01 今天呀 xff0c 来介绍大家最喜欢的Java篇 xff
  • 视图绑定【android jetpack】

    视图绑定 视图绑定 是通过对xml属性转化为对应的绑定类 会对xml布局中所有的具有id属性的组件创建直接的引用 视图绑定 与 传统的findviewbyid 视图绑定 xff1a 是对id属性组件的直接引用 相当于只要组件只要有了id属性
  • NLTK语料库下载

    仓库地址 https github com Trkly NLTK DATA 希望能够帮到大家并希望大家给个star 语料库的存放位置参考如下图
  • Manjaro入坑

    Manjaro入坑 没有技术还偏偏就是喜欢瞎折腾 xff0c 没错 xff0c 说的就是我 xff01 大一的时候装过 Ubuntu 43 Win10 以及 CentOS7 8 43 Win10 的双操作系统 xff0c 后来因为一些日常软
  • android 监听手机电量变化

    今天 xff0c 简单讲讲如何监听手机电量的变化 监听电量是不能静态注册的 后来上网搜索 xff0c 发现有五个不能静态注册的广播 xff0c 这里记录一下 xff0c 免得下次再后知后觉的发现并惊讶于自己的笨拙 不能静态注册的广播 and
  • 【笔记】libpcap安装与使用

    Ubuntu 20 04 文章目录 起步一 下载libpcap 库二 安装三 使用 完整程序 们 1 头文件集锦myheader h 2 打印报文内容sniff c 3 嗅探与伪造icmpspoof c 附加内容unmask 0 共享内存报
  • 2022基于Anaconda环境下Jupyter最全安装插件及配置相关知识及踩坑指南

    2022Jupyter 43 Anaconda最全安装相关知识及踩坑指南 一 简介1 概述2 下载网址以及参考文档3 优点 二 安装使用过程1 起始2 更改存储路径 xff08 踩坑 xff08 1 xff09 xff09 2 1 使用管理
  • 微信小程序整合WebScoket部署上线

    微信小程序整合WebScoket部署上线 在部署的服务器 中安装nginx xff0c 并作出如下配置 xff1a 思路 xff1a 此处监听的是外部的443端口和xcxapi wfeifei com域名 xff0c 当通过该域名和端口号进
  • Vue(v-show简介)

    v show简介 1 v show指令的作用是 xff1a 根据切换元素的显示状态 2 原理是修改元素 的display xff0c 实现显示隐藏 3 指令后面的内容 xff0c 最终都会解析为布尔值 4 值为true元素显示 xff0c
  • 使用python编写adb脚本实现自动化测试

    使用python编写adb脚本实现自动化测试 前言一 python与adb二 使用步骤1 基本原理2 方法1 xff1a 使用os system 函数实现2 方法2 xff1a 使用os popen 函数实现2 方法3 xff1a 使用su
  • 怎么在jupyter中安装tensorflow,并切换环境为tensorflow

    首先说一下遇到的问题是如下 xff08 前提是已经安装anaconda xff09 xff1a 一 进入jupyter打开终端 在cmd中输入jupyter notebook进入jupyter xff1a 然后进入终端 xff1a 进入之后
  • selenium 自动化测试

    selenium 是最广泛使用的开源Web UI xff08 用户界面 xff09 自动化测试套件之一 selenium测试脚本可以使用任何支持的编程语言进行编码 xff0c 并且可以直接在大多数现代Web浏览器中运行 在爬虫领域selen
  • 1.spring框架-----spring framework bean基础配置 bean生命周期

    目录 一 spring framework 1 IoC控制反转 Inversion of Control 2 DI依赖注入 Dependency Injection 3 bean基础配置 4 bean实例化 4 1构造方法 4 2静态工厂
  • 华为FusionCompute资源配置

    文章目录 前言主机配置添加主机网口绑定 网络资源配置创建DVS添加上行链路添加VLAN池创建端口组 存储资源配置添加存储接口添加存储资源 前言 在上一篇文章 xff1a 在VMware Workstation和云服务器上安装华为Fusion
  • 【无标题】javaweb文件上传与下载

    构建数据库filetest xff1a 包含文件名称及路径 SET FOREIGN KEY CHECKS 61 0 Table structure for file DROP TABLE IF EXISTS 96 file 96 CREAT
  • errno的一些错误定义

    define EPERM 1 Operation not permitted define ENOENT 2 No such file or directory define ESRCH 3 No such process define E
  • spring基于配置注入

    基于配置文件的springIOC注入 前言 在spring的学习中 依赖注入 ioc 面向切面编程 aop 是两个十分重要的知识点 正所谓spring的灵魂 此处是通过用户登录案例实现ioc中依赖注入的其中一种方式 基于配置文件通过sett