-
IOC的本质是:控制反转loC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现loC的一种方法,也有人认为DI只是loC的另一种说法。没有loC的程序中,我们使用面向对象编程,对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓控制反转就是:获得依赖对象的方式反转了。
-
loC是Spring框架的核心内容,使用多种方式完美的实现了loC,可以使用XML配置,也可以使用注解,新版本的Spring也可以零配置实现loC。
-
Spring容器在初始化时先读取配置文件,根据配置文件或元数据创建与组织对象存入容器中,程序使用时再从loc容器中取出需要的对象。
-
采用XML方式配置Bean的时候,Bean的定义信息是和实现分离的,而采用注解的方式可以把两者合为一体,Bean的定义信息直接以注解的形式定义在实现类中,从而达到了零配置的目的。
-
控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是loC容器,其实现方法是依赖注入(Dependency Injection,Dl)。
// 创建一个bean public class User { private String name; public User() { System.out.println("user的无参构造!"); } public User(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "User{" + "name='" + name + '\'' + '}'; } } // 模型层接口 public interface UserDao { void getUser(); } // 丢入spring容器 public class UserDaoMysqlImpl implements UserDao { @Override public void getUser() { System.out.println("Mysql获取用户数据!"); } } // 业务层接口 public interface UserService { void getUser(); } // 丢入spring容器 public class UserServiceImpl implements UserService { private UserDao userDao; //利用set进行动态实现值的注入! public void setUserDao(UserDao userDao){ this.userDao = userDao; } @Override public void getUser() { userDao.getUser(); } }
-
控制反转的配置
<?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"> <!-- 使用Spring来创建对象,在Spring这些都称为Bean; 类型变量名= new类型(); User user = new User(); id =变量含 class = new的对象; property相当于给对象中的属性设置一个值! --> <bean id="user" class="com.toec.pojo.User"> <!--无参构造--> <!--<property name="name" value="鲁智深" />--> <!--有参构造--> <!--<constructor-arg index="0" value="武松" />--> <!--<constructor-arg type="java.lang.String" value="林冲" />--> <constructor-arg name="name" value="卢俊义" /> </bean> <bean id="mysqlImpl" class="com.dao.UserDaoMysqlImpl" /> <bean id="userServiceImpl" class="com.service.UserServiceImpl"> <!-- ref : 引用Spring容器中创建好的对象 value :具体的值,基本数据类型!--> <property name="userDao" ref="mysqlImpl" /> </bean> </beans>
-
使用测试
import com.toec.pojo.User; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { // 获取Spring的上下文对象 ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); // 我们的对象现在都在iSpring中的管理了,我们要使用,直接去里面取出来就可以! User user =(User) context.getBean("user"); System.out.println(user.toString()); UserServiceImpl userServiceImpl = (UserServiceImpl) context.getBean("userServiceImpl"); userServiceImpl.getUser(); } }
-
User对象是谁创建的?
- user对象是由Spring创建的。
-
User对象的属性是怎么设置的?
- user对象的属性是由Spring容器设置的,
-
这个过程就叫控制反转:
-
控制:谁来控制对象的创建,传统应用程序的对象是由程序本身控制创建的,使用Spring后,对象是由Spring来创建的.
-
反转︰程序本身不创建对象,而变成被动的接收对象.
-
依赖注入:就是利用set方法来进行注入的.
-
IOC是一种编程思想,由主动的编程变成被动的接收.
Spring之IOC本质简述
最新推荐文章于 2023-08-17 00:19:13 发布