文章目录
Spring IOC
一、IOC 简介
- (1)什么是IOC
控制反转- (Inversion of Control,缩写为IoC)
》把原来new对象的这种方式转换成了,spring通过反射创建对象的方式
》spring创建完的对象放到一个容器中,谁需要就给谁注入进去- (获取对象并赋值给引用)
简单说:把创建对象和管理对象的权利交给spring
二、Spring的IOC入门-环境搭建
- (1)创建Project maven
- (2)创建模块module maven
- (3)配置依赖
<!--spring依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
三、Spring的IOC入门-代码编写
- (1)定义Person类
- (2)手动完成创建与赋值
- (3)由spring创建与赋值
---->创建容器对象
---->读配置文件
new ClassPathXmlApplicationContext(“applicationContext.xml”);
---->从容器中查找getBean()
Test01SpringIoc
public class Test01SpringIoc {
@Test
public void test01(){
//1:创建ioc 容器对象 暂时看成map
ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
//2:给定配置文件的名称 applicationContext.xml
//3:调用容器的getBean方法获取id对应的对象
Person person = (Person) context.getBean("person");
System.out.println(person);
}
}
applicationContext.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">
<!-- 要让 spring容器给我创建一个person对象-->
<!-- 配置类名,用于反向创建对象-->
<!-- 同时给一个编号方便查找-->
<bean id="person" class="com.wzx.domain.Person" />
</beans>
四、Spring的IOC入门-Bean标签
(1)方法区别
context.getBean("id值", 类型.class);//无需转型
context.getBean("id值");//需转型
- (2)bean标签的属性
id:bean标签的识别ID,理论上可以随便写
class:你要上Spring给你创建哪个类的对象,需要写上该类的全路径名
赋值的方式有两个
Person person1 = new Person();
//设置方法
person1.setId(1);
System.out.println(person1);
//构造方法赋值
Person person2 = new Person(1,"jack",20,new Date());
System.out.println(person2);
name:成员变量的名字
value:成员变量的值
一个property标签最后会调一个对应的set方法
<bean id="person2" class="com.wzx.domain.Person" >
<property name="id" value="10"/>
<property name="name" value="rose"/>
<property name="age" value="20"/>
</bean>
五、通过构造方法创建对象
<!-- Person person2 = new Person(1,"jack",20,new Date());-->
<!-- System.out.println(person2);-->
<bean id="date1" class="java.util.Date"/>
<bean id="person3" class="com.wzx.domain.Person" >
<constructor-arg name="id" value="10"/>
<constructor-arg name="name" value="hello"/>
<constructor-arg name="age" value="20"/>
<constructor-arg name="birthday" ref="date1"/>
</bean>
- 配置构造方法的参数的
- constructor-arg 如果有四个,就表示调的一个四个参数的构造方法。
- value可以赋上基本类型数据与String,但是其他对象,要使用ref
- 表示在当前容器中查找一个已存在的对象
六、Spring的IOC入门-静态工厂造对象
- (1)什么是静态工厂
XxxFactory.get(); - (2)通过调用静态方法获取bean对象
public class PersonFactory {
public static Person getBean() {
return new Person();//静态方法返回创建的对象
}
}
- (3)factory-method
指定获取对象的静态工厂的方法
<!-- Person person1 = PersonFactory.getBean();-->
<bean class="com.wzx.demo02.PersonFactory" factory-method="getBean" id="person4"/>
七、实例工厂造对象
- (1)什么是实例工厂
XxxFactory - (2)通过工厂对象调用成员方法获得bean对象
XxxFactory factory = new XxxFactory(); //实例化工厂对象
factory .yyy() //获得对象 - (3)factory-bean 创建工厂对象
- (4)factory-method 调用方法获得bean对象
<!-- PersonFactory2 factory2 = new PersonFactory2(); 创建工厂-->
<!-- Person person1 = factory2.getBean();调用工厂的方法-->
<bean class="com.wzx.demo03.PersonFactory2" id="factory2"/>
<bean factory-bean="factory2" factory-method="getBean" id="person5"/>
八、Spring的IOC入门-单例和多例
- 单例是什么?
内存中只有一个对象
,每次获取到该对象的地址值一样
. - 多实例是什么?
内存中的每个对象
都是一个新的对象,他们的地址值都不同
.
(1)问题: 每次获取对象的时候,spring是新创建一个对象还是始终给我们返回同一个对象.
(2)答案: spring默认的情况下创建的对象都是单例的. (每次返回的对象都是同一个)
scope="singleton" 单例(默认值)
scope="prototype" 多例
scope="request" 创建的对象放到request域中
scope="session" 创建对象放到session对象
多实例
<bean id="person" class="com.wzx.domain.Person" scope="prototype"/>
单实例
<bean id="person" class="com.wzx.domain.Person" scope="singleton"/>
七、
八、