Spring中IOC思想(1)

IOC推导概述

目的:解决企业应用开发的复杂性

功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

范围:任何Java应用

Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。

分析实现

我们使用原来的方式写一段代码测试:dao—>service—>前端

思考:现在前端传递或者调用不会变,所有操作都是我们程序猿来实现;

解决方案:前端操作,后台不变;留一个调用的接口

IOC的原型。

IOC的本质

控制反转 (inversion of Control):IOC

他是一种设计思想。 根据这个思想有实现的方式,DI : 依赖注入

本质就是设置接口 , set方法,是一种抽象思维

反转: 从被动到主动 , 程序猿主动控制 到 被动接受 , 由编写代码,编写接口,程序具有高度配置性和动态性;

在这里插入图片描述让程序的耦合性大大降低。方便模块独立:----> 微服务。解耦

IOC推导

1.在IDE中新建一个项目,关于Maven项目的创建我之前的博客有详细的步骤,在这里不再赘述,在创建好的大项目中导入junit包,方便我们进行测试,junit的依赖是

<dependency>
	<groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
</dependency>

关于依赖的如何导入的详细步骤在我之前的博客中也有详细的讲解
在这里插入图片描述上图所示是我创建好的项目

2.在创建完成项目后我在java目录下新建层级目录
在这里插入图片描述
在最下面的java目录下分别创建dao和service目录来作为整个程序的数据库和服务器部分
在这里插入图片描述
在test目录下的java目录下的程序相当于前端

3.在dao目录中
在这里插入图片描述

UserDao接口中:

package com.westos.java.dao;

public interface UserDao {
    public void getUser();
}

在impl目录下新建类来继承UserDao

package com.westos.java.dao.impl;

import com.westos.java.dao.UserDao;

public class getUser implements UserDao {
    public void getUser() {
        System.out.println("查找用户");
    }
}

至此dao目录下文件创建完成

4.在service目录中:
在这里插入图片描述
新建Service接口,这个接口的内容为:

package com.westos.java.service;

public interface Service {
    public void Getuser();
}

新建impl目录存放实体类,实体类Serviceimpl的内容为:

package com.westos.java.service.impl;

import com.westos.java.dao.UserDao;
import com.westos.java.dao.impl.getUser;
import com.westos.java.service.Service;

public class Serviceimpl implements Service {

    private UserDao userDao1;

    public void Getuser() {
        userDao1 = new getUser();
        userDao1.getUser();
    }
}

service目录编写完成

5.开始进行测试
在这里插入图片描述
代码为:

package com.westos.java;


import com.westos.java.service.impl.Serviceimpl;

public class Test {
    @org.junit.Test
    public void test(){
        Serviceimpl service = new Serviceimpl();
        service.Getuser();
    }
}

运行测试程序
在这里插入图片描述
程序运行成功,这就可以看做是从前端给service层发送请求,之后service层操作数据库来查找用户的一个流程

但是存在一种情况,在dao层中有许多实体类,那么服务层该如何选择就成为了一个问题,我们在dao层的实体类目录impl目录中新建两个类而且都实现了接口UserDao

使用Oracle查找

package com.westos.java.dao.impl;

import com.westos.java.dao.UserDao;

public class getUserOracle implements UserDao {
    public void getUser() {
        System.out.println("使用Oracle查找");
    }
}

使用MySql查找

package com.westos.java.dao.impl;

import com.westos.java.dao.UserDao;

public class getUserMysql implements UserDao {
    public void getUser() {
        System.out.println("使用MySql查找");
    }
}

如果从前端发来的请求是使用MySql进行查找,那么我们就需要对service层的代码进行改动,改动后为:

package com.westos.java.service.impl;

import com.westos.java.dao.UserDao;
import com.westos.java.dao.impl.getUser;
import com.westos.java.service.Service;

public class Serviceimpl implements Service {

    private UserDao userDao1;

    public void Getuser() {
        userDao1 = new getUserMysql();
        userDao1.getUser();
    }
}

运行结果为:
在这里插入图片描述运行成功,这次改动是对service层的代码进行改动,test层也就是模拟的前端的代码没有改变

但是在实际开发中不可能因为用户的一次改动就改动服务层的代码,这样会很麻烦,我们需要将控制权交给前端,要这样做需要怎么改动代码呢?

我们需要对service层中的Serviceimpl类进行一些改动:

package com.westos.java.service.impl;

import com.westos.java.dao.UserDao;
import com.westos.java.dao.impl.getUserMysql;
import com.westos.java.service.Service;

public class Serviceimpl implements Service {

    private UserDao userDao1;

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

    public void Getuser() {
        userDao1.getUser();
    }
}

对test层的测试代码也做相应的改变:

package com.westos.java;

import com.westos.java.dao.impl.getUserOracle;
import com.westos.java.service.impl.Serviceimpl;

public class Test {
    @org.junit.Test
    public void test(){
        Serviceimpl service = new Serviceimpl();
        service.setUserDao1(new getUserOracle());
        service.Getuser();
    }
}

运行测试程序:
在这里插入图片描述
通过这样,就将控制权权交给了test层也就是模拟的前端,

如果想要使用Mysql来进行查找只需要对测试层的测试代码进行改动就行,这就是IOC思想,就是实现对象创建的权利的转换

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值