Spring知识回顾
一、核心概念一IoCInversion of Control控制反转定义使用对象时将主动通过new产生对象的方式转换为由外部提供对象此过程中对象创建的控制权由程序内部转移到外部该设计思想称为控制反转。Spring 实现Spring 技术对 IoC 思想进行了落地实现。IoC 容器Spring 提供的核心容器充当 IoC 思想中的「外部」负责对象的创建、初始化等一系列工作。Bean在 IoC 容器中被创建或被管理的对象统称为 Bean。二DIDependency Injection依赖注入定义在 IoC 容器中建立 Bean 与 Bean 之间依赖关系的整个过程称为依赖注入。核心目标充分解耦。利用 IoC 容器管理所有 Bean通过 DI 在容器内为有依赖关系的 Bean 绑定关联最终效果使用对象时可直接从 IoC 容器获取且获取的 Bean 已绑定所有依赖关系。三业务层与数据层依赖示例层级代码示例依赖说明数据层BookDaopublic class BookDaoImpl implements BookDao {br public void save() {br System.out.println(book dao save ...);br }br}核心业务实现为业务层提供数据支撑业务层BookServicepublic class BookServiceImpl implements BookService {br private BookDao bookDao;br public void save() {br bookDao.save();br }br}依赖 BookDao 对象才能完成业务逻辑二、IoC 入门案例XML 版核心目标通过 XML 配置实现 Spring 对 Bean 的管理完成 IoC 思想的基础落地。实现步骤步骤核心操作① 导入 Spring 坐标在项目的构建文件如 Maven 的 pom.xml中引入 Spring 核心依赖坐标② 定义 Spring 管理的类接口编写业务层、数据层的接口及实现类如上述 BookDao、BookService 及其实现类③ 创建 Spring 配置文件并配置 Bean在资源目录下创建 Spring 核心配置文件通常命名为applicationContext.xml通过标签配置需由容器管理的 Bean④ 初始化 IoC 容器并获取 Bean通过 Spring 核心类初始化容器再根据 Bean 的标识从容器中获取对象三、DI 入门案例XML 版核心目标在 IoC 容器的基础上完成 Bean 之间的依赖绑定实现业务层对数据层的依赖注入。实现步骤步骤核心操作① 删除手动创建对象的代码移除业务层中通过new关键字创建数据层对象的代码解耦核心步骤② 提供依赖对象的 setter 方法在业务层实现类中为依赖的 Bean 定义对应的setter方法如为BookDao提供setBookDao方法③ 配置 Bean 之间的依赖关系在 Spring 配置文件中为业务层 Bean 配置依赖的数据源 Bean 关联四、Bean 基础配置XML 版核心标签bean配置项详细说明标签名称bean所属标签嵌套在beans根标签内核心功能定义 Spring 核心容器需要管理的对象Bean格式beansbr bean/br bean/beanbr/beans核心属性列表属性作用约束idBean 的唯一标识容器通过id获取对应 Bean一个 IoC 容器内id必须唯一classBean 的类型指定该 Bean 对应类的全路径类名必须是完整的包名 类名配置范例!-- 配置数据层 Bean -- bean idbookDao classcom.itheima.dao.impl.BookDaoImpl/ !-- 配置业务层 Bean -- bean idbookService classcom.itheima.service.impl.BookServiceImpl/bean五、Bean 作用范围说明1. 为什么 Bean 默认为单例单例模式可以减少对象创建和销毁的开销提升性能。对于无状态的服务层、数据层对象单例可以保证在整个应用中共享同一个实例避免资源浪费。2. 适合交给容器管理的 Bean表现层对象如 Controller业务层对象如 Service数据层对象如 Dao工具对象如工具类3. 不适合交给容器管理的 Bean封装实体的域对象如 Entity、POJO这类对象通常代表业务数据每次业务操作都需要新的实例不适合单例共享。六、Bean 别名配置核心属性name配置项详细说明名称name类型属性所属bean标签功能定义 Bean 的别名可定义多个使用逗号(,)、分号(;)或空格( )分隔范例bean idbookDao namedao bookDaoImpl classcom.itheima.dao.impl.BookDaoImpl/bean nameservice,bookServiceImpl classcom.itheima.service.impl.BookServiceImpl/注意事项获取 Bean 时无论是通过id还是name如果无法获取到将抛出异常NoSuchBeanDefinitionException。异常示例NoSuchBeanDefinitionException: No bean named bookServiceImpl available七、实例化 Bean 的三种方式——构造方法常用1. 提供可访问的构造方法public class BookDaoImpl implements BookDao { public BookDaoImpl() { System.out.println(book constructor is running ...); } public void save() { System.out.println(book dao save ...); } }2. 配置方式bean idbookDao classcom.itheima.dao.impl.BookDaoImpl /3. 注意事项Spring 默认通过无参构造方法实例化 Bean。如果类中不存在无参构造方法Spring 将抛出异常BeanCreationException。