IOC理论推导

Posted liqiliang1437

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOC理论推导相关的知识,希望对你有一定的参考价值。

IOC理论推导

1.UserDaoImpl接口

package com.liqilaing.dao;

public interface UserDao {
    void getUser();
}

2.UserDaoImpl实现类

package com.liqilaing.dao;

public class UserDaoImpl implements UserDao {
    public void getUser() {
        System.out.println("获取用户数据!");
    }
}

另一个需求的实现类

package com.liqilaing.dao;

public class UserDaomysqlImpl implements UserDao {
    public void getUser() {
        System.out.println("MySQL获取用户数据!");
    }
}

3.UserService业务接口

package com.liqilaing.service;

public interface UserService {
    void getUser();
}

4.UserServiceImpl业务实现类

package com.liqilaing.service;

import com.liqilaing.dao.UserDao;
import com.liqilaing.dao.UserDaoImpl;
import com.liqilaing.dao.UserDaoMysqlImpl;

public class UserServiceImpl implements UserService{

//    private UserDao userDao = new UserDaoMysqlImpl();
    private UserDao userDao;

    // set
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    /*
    我们使用一个set接口实现,已经发生了革命性的变化!

    之前,程序员是主动创建对象!控制权在程序员手上!
    使用了set注入之后,程序不再具有主动性,而是变成了被动的接受对象!

    这种思想,从本质上解决了问题,我们程序员不用再去管理对象的创建了.
    系统的耦合性大大降低,可以更加专注的在业务的实现上!这是IOC的原型!
     */

    public void getUser() {
        userDao.getUser();
    }
}

测试类

import com.liqilaing.dao.UserDaoImpl;
import com.liqilaing.dao.UserDaoMysqlImpl;
import com.liqilaing.service.UserService;
import com.liqilaing.service.UserServiceImpl;

public class MyTest {
    public static void main(String[] args) {

        // 用户实际调用的是业务层,dao层不需要接触
        UserService userService = new UserServiceImpl();

//        ((UserServiceImpl) userService).setUserDao(new UserDaoImpl());
        ((UserServiceImpl) userService).setUserDao(new UserDaoMysqlImpl());
        userService.getUser();
    }

}

在我们之前的业务中,用户的需求可能会影响我们原来的代码,我们需要根据用户的需求去修改源代码

代码量十分大的话,修改一次的成本代价十分昂贵!

我们使用一个set接口实现:

//    private UserDao userDao = new UserDaoMysqlImpl();
    private UserDao userDao;

    // set
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
我们使用一个set接口实现,已经发生了革命性的变化!

之前,程序员是主动创建对象!控制权在程序员手上!
使用了set注入之后,程序不再具有主动性,而是变成了被动的接受对象!

这种思想,从本质上解决了问题,我们程序员不用再去管理对象的创建了.
系统的耦合性大大降低,可以更加专注的在业务的实现上!这是IOC的原型

技术图片
技术图片


以上是关于IOC理论推导的主要内容,如果未能解决你的问题,请参考以下文章

IOC理论推导

IOC理论推导

Spring-简介-IOC理论推导

Spring学习简介与IOC理论推导

Spring--概述及IOC理论推导

Spring