控制反转(IOC)
以前编程,由程序员自己创建对象,现在编程,交由第三方创建对象。说白了就是,不需要自己手动创建对象,而是将对象托管到第三方容器中,从容器中获取依赖。
控制反转是一种通过描述(XML或注解)并通过第三方去产生或获取特定对象的方式。
在Spring中实现控制反转的是IOC容器。其实现方法是依赖注入(DI)。
例子:
1.创建maven工程,导入依赖
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
2.创建实体类User
public class User {
public void show(){
System.out.println("Hello IOC");
}
}
3.创建spring的配置文件beans.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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="hello" class="com.kuang.pojo.User"/>
</beans>
4.写一个Junit单元测试,测试IOC
@Test
public void test(){
//解析beans.xml配置文件,生成管理Bean对象的容器context
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//通过id从容器中取得这个对象
User bean = (User) context.getBean("hello");
//调用这个对象的方法
bean.show();
}
Spring容器在初始化时会先读取配置文件,将配置文件中对象放入容器中,程序使用时再从容器中取出需要的对象。
IOC创建对象方式
1.默认无参构造
<bean id="user" class="com.kuang.pojo.User"/>
2.有参构造(3种)
- 参数下标
<bean id="user1" class="com.kuang.pojo.User">
<constructor-arg index="0" value="王五"/>
</bean>
- 参数类型
<bean id="user2" class="com.kuang.pojo.User">
<constructor-arg type="java.lang.String" value="李四"/>
</bean>
- 参数名
<bean id="user3" class="com.kuang.pojo.User">
<constructor-arg name="name" value="张三"/>
</bean>