IOC容器

xml解析

反射

工厂模式

实现流程

  1. 配置xml文件, 配置需要创建的bean对象
  2. IOC容器通过xml解析获取属性值, 通过反射创建对象

IOC容器的两种接口

  • BeanFactory: 底层实现, 懒汉式创建对象

  • ApplicationContext: BeanFactory的子接口, 饿汉式创建对象

    两种主要的实现方式: FileSystemXmlApplicationContext和ClassPathXmlApplicationContext

    image-20220805104603127

Bean管理

  • 创建对象
  • 注入属性

推荐方式: 通过空参构造和set()赋值来创建对象

可以通过p名称空间来简化set注入方式

Bean类型

  • 普通Bean: 定义的class即为返回值类型

  • 工厂Bean: 创建工厂类, 并实现FactoryBean接口, 在其中定义返回的Bean类型

Bean作用域

默认是单例模式

Spring

  • 单例模式: 加载配置文件时创建对象, 饿汉式
  • 原型模式: getBean()的时候创建对象. 也没有办法用懒汉式, 一开始也不知道要创建多少个.

Bean生命周期

  1. 无参构造

  2. set方法赋值

  3. 后置处理器的postProcessBeforeInitialization方法

    后置处理器为实现了BeanPostProcessor接口的类.

    注意事项:

    • 需要注入到IOC容器中才能生效
    • 对所有的Bean对象都会生效
  4. bean对象的初始化方法(xml中配置init-method参数)

  5. 后置处理器的postProcessAfterInitialization方法

  6. 获取并使用bean

  7. 当容器关闭时, 销毁bean对象(xml中配置destroy-method参数)

属性注入

xml方式: 方便理解底层逻辑

注解方式: 快捷开发

  • @Autowired: byType方式
  • @Qualifier: byName方式
  • @Resource: 默认使用byType方式, 指定name属性后变为使用byName方式
  • @Value: 基本数据类型

通过属性注入的相关注解和自动装配的相关注解, 可以完全替代xml文件中的bean标签. 而添加主启动类[^1]可以开启注解支持, 组件扫描, 引入其他文件和配置类等.

xml中读取数据文件

<!--引入外部文件-->
<context:property-placeholder location="classpath:dataSource.properties"/>

[^1]:主启动类本身就是一个配置类, 配置类=配置文件


   转载规则


《》 熊水斌 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
Spring简介Spring核心IOC容器: 控制反转, 把创建对象的过程交给Spring进行管理 AOP切面编程: 面向切面, 不修改源代码进行功能增强 Spring特点 方便解耦, 简化开发 Aop编程支持 方便程序测试 方便和其他框架
2022-11-11
下一篇 
AOP面向切面编程底层原理: 动态代理动态代理的核心思想: 借助父类或接口的多态性特点, 在形式上, 通过调用原来存在的父类或接口中的方法, 而实际执行的是子类或实现类的代理类中的增强方法 JDK动态代理(针对接口)public class
2022-11-11
  目录