Spring框架有两个核心,IOC与AOP,今天要讲解的就是IOC(控制反转)
什么是IOC?
IOC又叫控制反转,简单来说就是将创建对象,和对象调用的方式交给spring容器来创建,就少了自己手动去调用的过程,让Spring自己去管理,我们只管用,不管创建。
目的:为了降低各层次之间的耦合性。
入门案例
1.在pom.xml中导入对应的依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.8</version>
</dependency>
</dependencies>
2.定义接口和实现类
public interface HeroService {
void save();
}
public class HeroServiceImpl implements HeroService {
public void save() {
System.out.println("save方法被执行了···");
}
}
3.创建并配置Spring核心配置文件命名为applicarionContext.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标签,将要Spring容器管理的实现类交给容器,id是名字为唯一值,class是指向的那个类
<bean id="heroService" class="cn.edu.cqie.service.impl.HeroServiceImpl"></bean>
</beans>
4.测试是否成功交给Spring容器
public class Test {
public static void main(String[] args) {
ApplicationContext cxt=new ClassPathXmlApplicationContext("applicationContext.xml");
//ApplicationContext:是Spring上下文接口,它是Spring IoC
//ClassPathXmlApplicationContext:是ApplicationContext的一个实现类,它可以从类路径下加载XML配置文件来Initializing Bean工厂。
//"applicationContext.xml":指定了需要加载的Spring配置文件路径,该文件一般存放在src/main/resources目录下。
//new ClassPathXmlApplicationContext():通过构造函数加载和解析applicationContext.xml文件配置内容,并建立BeanFactory对象容器。
HeroService heroService = (HeroService)cxt.getBean("heroServcie");
//通过getBean这个方法和id来让Spring容器给一个对象
heroService.save();
//调用对象的方法
}
}
IOC基本讲解
1.bean标签基本配置
对象交由Spring去管理
在默认情况下bean标签调用的是类中的无参构造函数,所以类中没有无参是无法创建对象的
id:Bean实例在Spring容器中的唯一标识
class:Bean实例的全限定名称
scope:用来确定对象的作用范围
1.singleton:单例,在不使用scope标签时,容器默认就是单例,是根据无参构造的
对象创建:是当使用对象时创建的也就是
ApplicationContext cxt=new ClassPathXmlApplicationContext("applicationContext.xml");
执行完这行代码的时候,容器就已经创建好了对象了,而且你在创建多个对象的时候,其实用的都是一个对象,
对象运行:只要对象在使用,就一直活着
对象销毁:当这个对象长时间没有使用的时候会被Java的垃圾回收机制给回收。
2.prototype:多例
每次获取实例的请求创建了一个新的实例,相当于每创建一个对象,它们是分别不同的对象,而不是用的一个对象,它是由请求方自己负责当前返回对象的后记生命周期的管理工作,包括该对象的销毁
3.request:在一次Http请求中,容器会返回该Bean的同一实例。而对于不同的http请求会产生新的Bean实例。当请求结束后,该实例也将会被销毁.
4.session在一次Session(会话)中,容器会返回Bean的同一实例。对于不同会话会创建新的实例。当会话结束后,该实例也将被销毁。