ioc是如何生成bean、注册和获取bean

创建bean实例的3种方式

无参构造方法 的方式(默认)
  • 编写类Bean1
    在这里插入图片描述
  • 编写配置
    在这里插入图片描述
静态工厂实例化的方式:含有静态方法的工厂类
  • 编写Bean2的静态工厂
    在这里插入图片描述
  • 配置
    在这里插入图片描述
实例工厂实例化的方式:通过实例工厂获得实例(不需要实现或者继承任何接口或者父类)
  • Bean3的实例工厂
    在这里插入图片描述
  • 配置
    在这里插入图片描述

Spring IOC依赖注入后的bean放在哪

  • Spring在初始化时,解析xml文件,将bean信息放在位于beanFactory的beanDefinitionMap中。依赖注入的时候,存放在factoryBeanObjectCache 的map中

Spring 的依赖注入

对于 Spring 程序, Spring 框架为我们提供一个 IoC 容器, 该容器负责创建对象和维护对象之间的依赖关系.
对于普通程序, 我们是通过对象本身来创建和解决自己的依赖问题.

ApplicationContext(新版本的工厂类) 即是 Spring 程序的 IoC 容器, 该容器负责创建 Bean, 并将功能类 Bean 注入到你需要的 Bean 中. 那么, Spring 是如何知道我们有哪些 Bean 类, 以及这些类的依赖关系是什么? 有三种配置方式告知 Spring 程序, 分别是 Xml 配置方式/注解配置方式/Java 配置方式.

ApplicationContext 是 Spring 程序的核心, 不管是 Spring 程序, 还是 Spring MVC 程序, 还是SpringBoot 程序, 其 main() 函数最主要的代码就是初始化了 ApplicationContext 容器, Spring 框架为我们提供了多种容器实现, 可以针对不同的应用场景选择.

  1. AnnotationConfigApplicationContext: 该容器读取从一个或多个基于 java 的配置类, 适用于 Java 配置方式;
  2. AnnotationConfigWebApplicationContext: 专门为 web 应用准备的, 适用于注解方式;
  3. XmlWebApplicationContext: 该容器读取一个或多个 Xml 配置文件,使用于 Xml 配置方式;
  4. ClassPathXmlApplicationContext, 该容器从 classpath 路径下读取 Xml 配置文件,使用于 Xml 配置方式.
//ApplicationContext context = new ClassPathXmlApplicationContext("resouces/applicationContext.xml");
//ApplicationContext context = new AnnotationConfigApplicationContext(ManConfig.class);

将Spring配置到应用开发中有以下三种方式(三种 Bean 配置方式)

  1. Xml 配置方式: 老的程序中经常见到, 比如将 Spring bean 声明放到 applicationContext.xml 中.
    在这里插入图片描述

    • xml配置bean注入方式详解
      • web.xml的加载顺序
        在这里插入图片描述
      • 两个阶段的bean配置注入:1.初始化通用上下文、2.初始化WebMVC(SpringMVC)上下文
        - xx
      • xml配置bean例子:这两个阶段,基本上都是配置“第三方bean”
        在这里插入图片描述
        在这里插入图片描述
  2. 注解配置方式: 在类定义时通过@Service, @Controller, @Repository, @Component 声明为 Spring Bean.
    @Service, 用于业务服务层
    @Controller, 用于展现层
    @Repository, 用于 DAO 层
    @Component, 通用组件, 它是上面 3 个注解的父注解, 没有明确的角色, 对于普通的组件最好使用@Component 注解
    在这里插入图片描述

  3. Java 配置方式: 该方式是通过@Configuration+@Bean 实现的
    具体为, 该方式引入了一个 Config 类, 在类中通过方法函数声明 bean 对象, 而 Pojo 类定义不加@Component 之类的注解, Config 类需要加上@Configuration 注解, Config 类中的 bean 方法需要加上@Bean 注解.
    @Configuration 等同于 xml 配置中的 <beans> </beans> 标签, 需说明的是@Component 其实也是@Component 的一个子注解,
    @Bean 等同于 xml 配置中的 <bean> </bean>标签. @Bean 用来注解一个函数, 该函数应该一个 Bean 对象, Bean 对象的名称是方法名.
    在这里插入图片描述

最佳实践: 注解配置方式和 Java 配置方式没有孰优孰劣, 理论上是可以相互替换的, 但可以总结一个最佳实践, 全局性的配置使用 Java 配置 (比如数据库相关配置, MVC 相关配置), 业务 Bean 配置使用注解配置, 尽量少用 Xml 配置方式.

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值