1.控制反转
IOC:Inversion of Control,把创建对象的权利交给框架。包括依赖注入和依赖查找
作用:削减计算机程序的耦合(依赖关系)
2.使用 spring 的 IOC 解决程序耦合
spring依赖配置
1 | <dependencies> |
创建接口和实现类
1 | public interface AccountService { |
在类路径下或者类路径下的resources中创建一个任意名字的xml文件,给配置文件导入约束;并让spring管理资源
1 |
|
测试是否配置成功
1 | public class client { |
3.Spring 基于 XML 的 IOC 细节
1.spring 中工厂的类结构图
3.2BeanFactory 和 ApplicationContext 的区别
BeanFactory时spring容器中的顶层接口,ApplicationContext 时它的子接口
BeanFactory:在创建核心容器时,创建对象采用的策略是延迟加载的方式,即根据id获取对象的时候才会真正的创建对象,适用于创建多例对象
ApplicationContext :在创建核心容器时,创建对象采用的是立即加载的方式,一读完配置文件马上就创建配置文件中配置的对象,适用于创建单例对象
3.3ApplicationContext 接口的实现类
ClassPathXmlApplicationContext:它是从类的根路径下加载配置文件
FileSystemXmlApplicationContext:它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置。
**AnnotationConfigApplicationContext:**当我们使用注解配置容器对象时,需要使用此类来创建 spring 容器。它用来读取注解。
4. IOC 中 bean 标签和管理对象细节
4.1bean标签
作用:配置让spring创建对象
属性:
id:给对象在容器中提供一个唯一标识。用于获取对象。
class:指定类的全限定类名。用于反射创建对象。默认情况下调用无参构造函数。
scope:指定对象的作用范围。
- singleton :默认值,单例的.
- prototype :多例的.
request :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中.
session :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中.
global session :WEB 项目中,应用在集群环境的会话范围(全局会话范围)。如果没有集群环境那globalSession 相当于 session.
init-method:指定类中的初始化方法名称。
destroy-method:指定类中销毁方法名称。
4.2实例化 Bean 的三种方式
第一种方式:使用默认无参构造函数。在默认情况下:它会根据默认无参构造函数来创建类对象。如果 bean 中没有默认无参构造函数,将会创建失败。
1 | <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"/> |
第二种方式:spring 管理实例工厂— 使用实例工厂的方法创建对象
该类可能存在于jar包中,无法修改源码提供默认构造器
1 | /** |
第三种方式:spring 管理静态工厂— 使用静态工厂的方法创建对象
1 | public class staticFactory { |
4.2 bean的作用范围和生命周期
**单例对象:scope=”singleton”**,一个应用只有一个对象的实例。它的作用范围就是整个应用。
生命周期:
对象出生:当应用加载,创建容器时,对象就被创建了。init-method属性
对象活着:只要容器在,对象一直活着。
对象死亡:当应用卸载,销毁容器时,对象就被销毁了。init-destroy属性
**多例对象:scope=”prototype”**,每次访问对象时,都会重新创建对象实例。
生命周期:
对象出生:当使用对象时,spring框架创建新的对象实例。
对象活着:只要对象在使用中,就一直活着。
对象死亡:当对象长时间不用,且没有别的对象引用时,会被 java 的垃圾回收器回收。
1 | <bean id="accountService" class="cn.hxx.service.impl.AccountServiceImpl" scope="prototype" init-method="init" destroy-method="destroy"></bean> |