ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

3.IOC理论推导

2021-05-23 16:01:05  阅读:217  来源: 互联网

标签:dao UserDao 推导 IOC 理论 faq getUser com public


IOC理论推导

以前:

  1. UserDao接口

    package com.faq.dao;
    
    public interface UserDao {
        void getUser();
    }
    
    
  2. UserDaoImpl实现类

    package com.faq.dao;
    
    public class UserDaoImpl implements UserDao{
        public void getUser(){
            System.out.println("默认获取用户的数据");
        }
    }
    
    
    package com.faq.dao;
    
    public class UserDaoMysqlImpl implements UserDao{
        public void getUser() {
            System.out.println("Mysql获取用户数据");
        }
    }
    
  3. UserService业务接口

    package com.faq.service;
    
    public interface UserService {
        void getUser();
    }
    
  4. UserServiceImpl业务实现类

    package com.faq.service;
    
    
    import com.faq.dao.UserDao;
    import com.faq.dao.UserDaoImpl;
    import com.faq.dao.UserDaoMysqlImpl;
    
    //业务层调Dao层
    public class UserServiceImpl implements UserService {
    
        private UserDao userDao=new UserDaoImpl();//组合
        private UserDao userDao1=new UserDaoMysqlImpl();
        public void getUser() {
            userDao1.getUser();
        }
    }
    
  5. 测试类

    import com.faq.dao.UserDao;
    import com.faq.dao.UserDaoImpl;
    import com.faq.service.UserService;
    import com.faq.service.UserServiceImpl;
    
    public class MyTest {
        public static void main(String[] agrs){
            //用户实际调用的是业务层,dao层不需要接触
            UserServiceImpl userService = new UserServiceImpl();
            userService.getUser();
        }
    }
    

再上述的业务中,用户的需求可能会影响我们原来的代码(UserServiceImpl中调用dao层创建不同的对象),我们需要根据用户的需求去修改原代码!程序量巨大时修改成本高

使用set接口实现

public class UserServiceImpl implements UserService {

    private UserDao userDao;

    //利用set进行动态实现值的注入!
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

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

测试

public class MyTest {
    public static void main(String[] agrs){
        //用户实际调用的是业务层,dao层不需要接触
        UserServiceImpl userService = new UserServiceImpl();
        //userService.setUserDao(new UserDaoMysqlImpl());
         userService.setUserDao(new UserDaoImpl());
        userService.getUser();
    }
}
  • 之前,程序是主动创建对象!控制权在程序猿手上
  • 使用set注入后,程序员不在具有主动性,而是变成被动的接受对象

这种思想,本质上解决了问题,程序员不用再去管理对象的创建。系统耦合性大大降低,可以更专注于业务的实现!这是IOC(控制反转)的原型

标签:dao,UserDao,推导,IOC,理论,faq,getUser,com,public
来源: https://blog.csdn.net/angel56789/article/details/117196139

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有