IOC的本质

IOC的本质

什么是IOC

IOC(Inversion of Control)控制反转,是指本由程序员控制的事交由用户来控制,控制权反转的理念。
本文主要讲利用set方法实现IOC, 是IOC理念最初级的实现方式

实践

dao层接口

package com.springstudy.demo01.dao;

/**
 * 功能描述
 *
 * @since 2022-06-22
 */
public interface UserDao {
    void getUser();
}

dao层mysql实现

package com.springstudy.demo01.dao;

/**
 * 功能描述
 *
 * @since 2022-06-22
 */
public class UserDaoMysqlImpl implements UserDao {
    @Override
    public void getUser() {
        System.out.println("MysqlDao");
    }
}

dao层Orcale实现

package com.springstudy.demo01.dao;

/**
 * 功能描述
 *
 * @since 2022-06-22
 */
public class UserDaoOracleImpl implements UserDao {
    @Override
    public void getUser() {
        System.out.println("OracleDao");
    }
}

service层接口

package com.springstudy.demo01.service;

/**
 * 功能描述
 *
 * @since 2022-06-22
 */
public interface UserService {
    void getUser();
}

service层实现

package com.springstudy.demo01.service;

import com.springstudy.demo01.dao.UserDao;

/**
 * 功能描述
 *
 * @since 2022-06-23
 */
public class UserServiceImpl implements UserService {
    private UserDao userDao;

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

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

测试代码

package com.springstudy.demo01;

import com.springstudy.demo01.dao.UserDaoMysqlImpl;
import com.springstudy.demo01.dao.UserDaoOracleImpl;
import com.springstudy.demo01.service.UserServiceImpl;

/**
 * 功能描述
 *
 * @since 2022-06-23
 */
public class Demo1Test {
    public static void main(String[] args) {
        UserDaoMysqlImpl mysql = new UserDaoMysqlImpl();
        UserServiceImpl userService = new UserServiceImpl();
        userService.setUserDao(mysql);
        userService.getUser();


        UserDaoOracleImpl userDaoOracle = new UserDaoOracleImpl();
        userService.setUserDao(userDaoOracle);
        userService.getUser();
    }
}

代码分析

service层直接调用dao层方法,由于dao层有多个实现,如果在service实现类中直接将dao实例化,则后期更换数据库则需要修改代码,而使用set方法,用户可以自己设置需要使用的dao层实现类,代码可扩展性增强,控制权交由用户来处理

总结

所谓控制反转,本质就是获得依赖对象的方式反转了
控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection, DI)

posted @   Oh,mydream!  阅读(97)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示