学习笔记(三):spring项目种的IOC和DI 和 项目中的各层之间的关系与实现的功能

文章介绍了JavaSpring框架中IOC(控制反转)和DI(依赖注入)的概念,并通过一个简单的项目结构展示了它们的应用。项目包括Controller层、DAO层、DAO.impl层、Service层和服务实现层,其中Service层的实现借助Spring的XML配置文件实现了DI,从而解耦了代码并提高了可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接上篇文章:

项目如下( 简单的构建 ),并且将每层做的业务逻辑进行简单的描述

首先,社么是IOC 和 DI

IOC: [  控制反转  ]Spring中的IOC是一种思想,而DI就是这种思想的实现的方法;

(1)contorller层

  • 当前的contrller层中间的业务主要是进行:控制对浏览器页面的跳转,主要对接的类就是当前的service层的

    接口和接口的实现类进行对接;针对service层返回的数据映射到浏览器上(以及一些的简单的逻辑的编写)。


package com.jie.controller;
// 当前类是一个控制层Controller,目前还没有对当前的类进行配置,等后面会进行配置​
public class LonginController {
​
}
​

(2)dao层

  • 主要是对数据库数据一些操作,通过jdbc或者mybatis对数据库的数据进行操作【增,删,改,查】;而当前的dao层主要是一些接口,真正实现的还是dao下的impl的实现类进行数据的【增,删,改,查】。

package com.jie.dao;
​
public interface UserDao {
    // 增
    public void addUser();
    // 删
    public void deleteUser();
    // 改
    public void updateUser();
    // 查
    public void queryUser();
​
}

(3)dao.impl层

  • 当前类实现了dao层的接口并且对dao层中的方法进行了实现,完成对数据的【增删改查】。

package com.jie.dao.impl;
​
import com.jie.dao.UserDao;
​
public class UserDaoImpl implements UserDao {
​
    @Override
    public void addUser() {
        System.out.println(" add user ");
    }
​
    @Override
    public void deleteUser() {
        System.out.println(" delete user ");
    }
​
    @Override
    public void updateUser() {
        System.out.println( " update user " );
    }
​
    @Override
    public void queryUser() {
        System.out.println(" query user ");
    }
}
​

(4)service层

  • 业务控制层,在当前的service层中主要是一些对接的接口,并通过service层的impl下的实现类进行对数据的

    操作,当前接口中主要对dao层中的数据返回的数据进行一些业务逻辑操作以及类型之间的转换而定义的一些抽象的方法。

package com.jie.service;
​
public interface UserService {
​
    public void addService();
​
    public void deleteSerevice();
​
    public void upateSersvice();
​
    public void queryService();
​
}
​

(5)service.impl层

  • 实现了service层接口的方法,对service接口中[dao层中的数据返回的数据]进行一些业务逻辑操作以及类型之间的转换而定义的一些抽象的方法进行实现,并且向controller层映射数据。

package com.jie.service.impl;
​
import com.jie.dao.UserDao;
import com.jie.dao.impl.UserDaoImpl;
import com.jie.service.UserService;
​
public class UserServiceImpl implements UserService {
​
    /*
      问题描述:
    * 当前的userService的类中的实现一般都是对业务逻辑性的编辑,假设当前的类中使用到了dao层中的数据,就需要创建一个userDao的对象或者实例,那么如果当前的项目是一个大的项目,对dao层的修改也将会是一个大的耗时的操作,那么对开发很不友好,所以这里需要IOC控制反转
    * */
​
    private UserDao userDao;
​
​
    // 第一步:添加当前属性userDao的get和set方法
    public UserDao getUserDao() {
        return userDao;
    }
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
​
​
    @Override
    public void addService() {
        System.out.println(" add is service ");
        userDao.addUser();
    }
​
    @Override
    public void deleteSerevice() {
        System.out.println(" delete is service ");
    }
​
    @Override
    public void upateSersvice() {
        System.out.println(" update is service ");
    }
​
    @Override
    public void queryService() {
        System.out.println(" query is service ");
    }
}
​

(6)resources下的xml>>>>>>>spring-context.xml

  • spring的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!--
    schema  : 是一种规范
    后缀为xsd的文件 xml schama definition 的缩写
-->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/mvc
                           http://www.springframework.org/schema/mvc/spring-mvc.xsd">
​
    <!-- Spring MVC配置 -->
    <bean id="userDaoImpl" class="com.jie.dao.impl.UserDaoImpl"></bean>
    
    <!-- 在当前的userServiceImpl的类中的userDao的实现类交由Spring进行管理 >>IOC 控制反转
            前提条件:
            userDao 在当前的userDaoImpl类中实现了getter和setter的方法
     -->
    <bean id="userServiceImpl" class="com.jie.service.impl.UserServiceImpl">
        <!-- 这个就是依赖注入
            将userDao的实现类通过set注入到当前的userServiceImpl中
        -->
        <property name="userDao" ref="userDaoImpl"></property>
    </bean>
</beans>

(7)测试类

SpringFactoryTest类,用来测试数据

package com.jie.test;
​
import com.jie.dao.impl.UserDaoImpl;
import com.jie.service.impl.UserServiceImpl;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
​
public class SpringFactoryTest {
​
    @Test
    public void SpringFctoryTest(){
        ApplicationContext classPathXmlApplicationContext =
                new ClassPathXmlApplicationContext("/spring-context.xml");
       //  UserDaoImpl userDaoImpl = (UserDaoImpl)classPathXmlApplicationContext.getBean("userDaoImpl");
        UserServiceImpl userServiceImpl = (UserServiceImpl)classPathXmlApplicationContext.getBean("userServiceImpl");
​
        // userDaoImpl.addUser();
        // 此时:在我们启动工厂的时候,并没有创建userDao的对象,但是在实际运行中
        // 通过使用了userDaoImpl的对象间接性的调用了userDao对象的add的方法,实现了数据的增加操作
        userServiceImpl.addService();
    }
​
}
​
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值