初步理解 Spring IOC 思想

Vanna ·
更新时间:2024-11-14
· 936 次阅读

初步理解 Spring IOC 思想Spring IOC大体思想示例说明并辅助理解示例一(摘自狂神的视频):示例二(买果汁):抽取思想总结 Spring IOC

最近跟着B站的狂神学习了Spring的大概,以前有过写传统JavaWeb的经验,现在也算是进阶学习框架吧,这篇博客主要记录一下Spirng中的两个重要思想之一——IOC,控制反转

大体思想

在开发的过程中,当体量较小时,用户需求的变更我们只需要修改几行源代码,目标代码容易找到,且容易修改,逻辑也更容易理解。但当项目的体量逐渐增大,乃至上万行时,每次用户需求的变更,如果按照以往的开发模式,我们需要修改几万行源代码,这明显是不合理的,如何减少需求变更时对源代码的修改,而采用注入的方法来达到目的,这就是IOC的用处。

示例说明并辅助理解 示例一(摘自狂神的视频):

JavaWeb开发中的Dao层接口:

package com.kuang.dao; public interface UserDao { void getUser(); }

Dao接口的几个实现类:

package com.kuang.dao; public class UserDaoImpl implements UserDao { public void getUser() { System.out.println("默认获取用户的数据"); } } package com.kuang.dao; public class UserDaoMysqlImpl implements UserDao{ @Override public void getUser() { System.out.println("Mysql获取用户数据!"); } } ```java package com.kuang.dao; public class UserDaoOracleImpl implements UserDao{ @Override public void getUser() { System.out.println("Oracle获取用户数据!"); } } package com.kuang.dao; public class UserDaoSqlserverImpl implements UserDao{ @Override public void getUser() { System.out.println("Sqlserver获取用户数据!"); } }

接下来说Service层的接口,一般都是通过Service层(业务层)去调用Dao层,来完成相关操作:

package com.kuang.service; public interface UserService { void getUser(); }

业务层接口的实现类:

package com.kuang.service; import com.kuang.dao.UserDao; import com.kuang.dao.UserDaoImpl; public class UserServiceImpl implements UserService { // private UserDao userDao = new UserDaoImpl(); private UserDao userDao; //利用set进行动态实现值的注入! public void setUserDao(UserDao userDao){ this.userDao = userDao; } public void getUser() { userDao.getUser(); } }

编写的测试类:

import com.kuang.dao.UserDao; import com.kuang.dao.UserDaoMysqlImpl; import com.kuang.dao.UserDaoOracleImpl; import com.kuang.service.UserService; import com.kuang.service.UserServiceImpl; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MyTest { public static void main(String[] args) { //用户实际调用的是业务层,dao层他们不需要直接接触。 // UserService userService = new UserServiceImpl(); // UserDao userService = new UserDaoMysqlImpl(); // UserDao userService = new UserDaoOracleImpl(); /*UserService userService = new UserServiceImpl(); ((UserServiceImpl) userService).setUserDao(new UserDaoMysqlImpl()); ((UserServiceImpl) userService).setUserDao(new UserDaoOracleImpl()); userService.getUser();*/ //获取ApplicationContext:拿到Spring的容器 ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); //容器在手,天下我有,需要什么,就直接get什么! UserServiceImpl userServiceImpl = (UserServiceImpl) context.getBean("UserServiceImpl"); userServiceImpl.getUser(); } } 示例二(买果汁):

传统思想
主动创造橙汁,需要我们实现自己可能不太然悉的工作——如何搅拌橙汁, 显然这不是一个好的办法。
原创文章 2获赞 2访问量 430 关注 私信 展开阅读全文
作者:我请求:雨



spring ioc

需要 登录 后方可回复, 如果你还没有账号请 注册新账号