### Spring高级知识点解析 #### 一、Spring IOC与DI的理解及其区别 - **IoC (Inversion of Control)**: IoC是一种设计原则,其核心思想是“控制反转”,即将对象的创建过程从代码中分离出来,交给外部容器来管理。在Spring框架中,这种反转主要体现在对象的创建上。通常情况下,开发者需要在代码中自行创建对象并管理其生命周期,而使用IoC后,这些工作由Spring容器完成。例如,原本程序员需要在代码中手动创建`UserService`对象,但在Spring中,这个任务被委托给了Spring容器。 - **DI (Dependency Injection)**: DI即依赖注入,是IoC的一种实现方式。它允许我们定义对象之间的依赖关系,并在运行时将这些依赖注入到相应的对象中。在Spring中,当容器创建一个Bean时,会根据配置文件中的信息自动注入该Bean所依赖的其他Bean。这种方式使得代码更加松耦合,易于维护和测试。 - **IoC与DI的区别**: - IoC强调的是控制权的转移,即将对象的创建和管理责任从应用程序代码中分离出去,交给容器。而DI则是IoC的具体实现方式之一,通过在容器创建对象的过程中动态地注入依赖关系,从而实现控制反转。 - 在面试中,通常会被问及二者的关系,可以这样回答:IoC是一种设计思想,指的是对象的创建和控制权被转移到了Spring容器;而DI是IoC的一种具体实现形式,即通过依赖注入的方式实现控制反转。 #### 二、BeanFactory接口与ApplicationContext接口的区别 - **BeanFactory**: 这是Spring框架中最基础的容器接口,提供了Bean的实例化、依赖注入等功能。它的特点是延迟加载,即只有当第一次通过`getBean`方法请求某个Bean时,才会创建该Bean的实例。 - **ApplicationContext**: 它继承自`BeanFactory`,提供了更多的功能和服务。如资源访问、事务管理、消息服务等,并且支持国际化(i18n)。它会在启动阶段就加载所有的Bean定义并初始化Bean。此外,`ApplicationContext`还提供了一个更为丰富的API,支持事件广播等功能。 - **应用场景**: - 在实际开发中,由于`ApplicationContext`提供了更多实用的功能,因此更常被使用。例如,在Web应用中,通常会选择`WebApplicationContext`。 - `BeanFactory`则较少直接使用,但它是Spring的核心容器接口,理解其原理对于深入掌握Spring框架非常重要。 #### 三、Spring配置Bean实例化的方式 - **使用类构造器实例化**: 这是最常见的Bean实例化方式。Spring会直接调用Bean的无参构造器来创建实例。例如: ```xml <bean id="bean1" class="cn.itcast.spring.b_instance.Bean1"> </bean> ``` - **使用静态工厂方法实例化**: 在这种方式下,Spring会调用静态工厂方法来创建Bean实例。这种方法遵循简单工厂模式。例如: ```xml // 下面这段配置的含义:调用Bean2Factory的getBean2方法得到bean2 <bean id="bean2" class="cn.itcast.spring.b_instance.Bean2Factory" factory-method="getBean2"> </bean> ``` - **使用实例工厂方法实例化**: 这种方式遵循工厂方法模式。首先创建一个工厂Bean,然后通过该工厂Bean创建目标Bean实例。例如: ```xml <bean id="bean3Factory" class="cn.itcast.spring.b_instance.Bean3Factory"> </bean> <bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"> </bean> ``` #### 四、Spring Bean的生命周期 - **初始化和销毁方法**: - 初始化方法可以通过`init-method`属性指定,而销毁方法可以通过`destroy-method`属性指定。例如: ```xml <bean id="lifecyclebean" class="cn.itcast.spring.d_lifecycle.lifecyclebean" init-method="setup" destroy-method="teardown"> </bean> ``` - 需要注意的是,`destroy-method`仅对单例`scope="singleton"`的Bean有效,并且只有在手动关闭`ApplicationContext`对象时才会被调用。 - **完整的生命周期**: - Spring Bean的生命周期包括了从创建到销毁的一系列步骤。一般而言,完整的生命周期包含以下步骤: 1. Bean的定义加载。 2. 实例化Bean。 3. 设置Bean属性值。 4. 调用初始化方法(如果定义了的话)。 5. Bean处于可服务状态。 6. 当容器关闭时,调用销毁方法(如果定义了的话)。 - 对于单例Bean,Spring容器在启动时就会创建其实例,并执行初始化方法。而对于原型Bean,则是在每次获取时都会创建一个新的实例。理解Bean的生命周期对于正确配置Bean的初始化和销毁逻辑非常重要。
剩余23页未读,继续阅读
- 粉丝: 2617
- 资源: 264
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助