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)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |