IOC的本质

铁佛  金牌会员 | 2022-6-24 13:36:14 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 542|帖子 542|积分 1626

IOC的本质

什么是IOC

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

dao层接口
  1. package com.springstudy.demo01.dao;
  2. /**
  3. * 功能描述
  4. *
  5. * @since 2022-06-22
  6. */
  7. public interface UserDao {
  8.     void getUser();
  9. }
复制代码
dao层mysql实现
  1. package com.springstudy.demo01.dao;
  2. /**
  3. * 功能描述
  4. *
  5. * @since 2022-06-22
  6. */
  7. public class UserDaoMysqlImpl implements UserDao {
  8.     @Override
  9.     public void getUser() {
  10.         System.out.println("MysqlDao");
  11.     }
  12. }
复制代码
dao层Orcale实现
  1. package com.springstudy.demo01.dao;
  2. /**
  3. * 功能描述
  4. *
  5. * @since 2022-06-22
  6. */
  7. public class UserDaoOracleImpl implements UserDao {
  8.     @Override
  9.     public void getUser() {
  10.         System.out.println("OracleDao");
  11.     }
  12. }
复制代码
service层接口
  1. package com.springstudy.demo01.service;
  2. /**
  3. * 功能描述
  4. *
  5. * @since 2022-06-22
  6. */
  7. public interface UserService {
  8.     void getUser();
  9. }
复制代码
service层实现
  1. package com.springstudy.demo01.service;
  2. import com.springstudy.demo01.dao.UserDao;
  3. /**
  4. * 功能描述
  5. *
  6. * @since 2022-06-23
  7. */
  8. public class UserServiceImpl implements UserService {
  9.     private UserDao userDao;
  10.     public void setUserDao(UserDao userDao) {
  11.         this.userDao = userDao;
  12.     }
  13.     @Override
  14.     public void getUser() {
  15.         userDao.getUser();
  16.     }
  17. }
复制代码
测试代码
  1. package com.springstudy.demo01;
  2. import com.springstudy.demo01.dao.UserDaoMysqlImpl;
  3. import com.springstudy.demo01.dao.UserDaoOracleImpl;
  4. import com.springstudy.demo01.service.UserServiceImpl;
  5. /**
  6. * 功能描述
  7. *
  8. * @since 2022-06-23
  9. */
  10. public class Demo1Test {
  11.     public static void main(String[] args) {
  12.         UserDaoMysqlImpl mysql = new UserDaoMysqlImpl();
  13.         UserServiceImpl userService = new UserServiceImpl();
  14.         userService.setUserDao(mysql);
  15.         userService.getUser();
  16.         UserDaoOracleImpl userDaoOracle = new UserDaoOracleImpl();
  17.         userService.setUserDao(userDaoOracle);
  18.         userService.getUser();
  19.     }
  20. }
复制代码
代码分析

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

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

铁佛

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表