spring基于配置注入

基于配置文件的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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值