🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
IoC 控制反转是一种设计思想,就是把对象的创建、管理、装配,交给 Spring 容器进行管理,其目的是降低组件之间的耦合度,管理这些组件的容器就叫 IoC 容器。 <br/> 在 Spring 中实现 IoC 控制反转的方法是 DI 依赖注入。 在依赖注入中,您不必创建对象,只需要描述对象需要哪些服务,然后由 IoC 容器去创建这些对象。 <br> 在传统的软件开发思想中,对象的创建由调用方进行管理,如下: ```java public class UserServiceImpl implements UserService { /** * UserDaoImpl 对象由调用方 UserServiceImpl 进行创建和管理,他们两个深度耦合。 */ private UserDao userDao = new UserDaoImpl(); @Override public User login(String username) { User user = userDao.findByUsername(username); if (user == null) { //do something } return user; } } ``` <br/> 如果采用 IoC 则可以将 UserDaoImpl 对象的创建交给 IoC 容器去完成,如下: ```java //**** 文件名:ApplicationContentext.xml ****// <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 创建对象 --> <bean id="userDao" class="learn.springioc.dao.impl.UserDaoImpl"/> </beans> //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ public class UserServiceImpl implements UserService { /** 获取 IoC 容器 */ private final ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContentext.xml"); @Override public User login(String username) { //获取IoC容器中的对象 UserDao userDao = context.getBean(UserDaoImpl.class); User user = userDao.findByUsername(username); if (user == null) { //do something } return user; } } ```