码迷,mamicode.com
首页 > 其他好文 > 详细

IOC理论推导

时间:2020-05-09 17:04:05      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:com   src   mys   set   sqli   程序   use   inf   修改   

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理论推导

标签:com   src   mys   set   sqli   程序   use   inf   修改   

原文地址:https://www.cnblogs.com/liqiliang1437/p/12858286.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!