您现在的位置是:首页 >其他 >Spring-重新认识IoC二网站首页其他

Spring-重新认识IoC二

码农界的菜鸟 2024-06-19 13:56:19
简介Spring-重新认识IoC二


依赖查找的方式

  • 根据 Bean 名称查找
    • 实时查找
    • 延迟查找
  • 根据 Bean 类型查找
    • 单个 Bean 对象
    • 集合 Bean 对象
  • 根据 Bean 名称 + 类型查找
  • 根据 Java 注解查找
    • 单个 Bean 对象
    • 集合 Bean 对象

依赖注入的方式

  • 根据 Bean 名称注入
    • 根据 Bean 类型注入
    • 单个 Bean 对象
    • 集合 Bean 对象
  • 注入容器內建 Bean 对象
  • 注入非 Bean 对象
  • 注入类型
    • 实时注入
    • 延迟注入

依赖查找和依赖注入的来源

  • 自定义 Bean
    • xml
    • 注解
  • 容器內建 Bean 对象
    • 比如Environment类
  • 容器內建依赖
    • 比如BeanFactory

Ioc配置源信息

  • Bean 定义配置
    • 基于 XML 文件
    • 基于 Properties 文件
    • 基于 Java 注解
    • 基于 Java API(专题讨论)
  • IoC 容器配置
    • 基于 XML 文件
    • 基于 Java 注解
    • 基于 Java API (专题讨论)
  • 外部化属性配置
    • 基于 Java 注解

BeanFactory 和 ApplicationContext 谁才是 Spring IoC 容器

  • BeanFactory 是 Spring IoC 容器最基本的接口,提供了创建、配置、管理和依赖注入等基本功能。它是一个轻量级的容器,适合于简单的应用场景。
  • ApplicationContext 是 BeanFactory 的子接口,除了继承了 BeanFactory 的所有功能外,还提供了一些高级特性。它是一个更加完整和强大的容器,适合于复杂的应用场景。ApplicationContext 除了 IoC 容器角色,还有提供:
    • 面向切面(AOP)
    • 配置元信息(Configuration Metadata)
    • 资源管理(Resources)
    • 事件(Events)
    • 国际化(i18n)
    • 注解(Annotations)

  因此,可以说 ApplicationContext 是 Spring IoC 容器的“超集”,提供了更多的功能和更完整的支持。在实际应用中,可以根据具体的需求选择使用 BeanFactory 还是 ApplicationContext。

如何使用BeanFactory和ApplcationContext

  前面我们说过,BeanFactory可以实现简单的Ioc容器的功能,如果我们只有配置并管理Bean的需求,可以使用BeanFactory,代码示例如下:

public class BeanFactoryIocContainer {
    public static void main(String[] args) {
        // 创建容器
        DefaultListableBeanFactory defaultListableBeanFactory = new DefaultListableBeanFactory();

        // 加载Bean配置
        XmlBeanDefinitionReader xmlBeanDefinitionReader = new XmlBeanDefinitionReader(defaultListableBeanFactory);
        String location = "classpath:/META-INF/dependency-lookup-context.xml";
        xmlBeanDefinitionReader.loadBeanDefinitions(location);

        // 获取Bean
        User bean = defaultListableBeanFactory.getBean(User.class);
    }
}

  前面我们说过,ApplicationContext除了能实现BeanFactory的基本功能以外,还可以实现注解等额外功能,代码示例如下:

public class AnnotationApplicationContextIocContainer {
    public static void main(String[] args) {
        // 创建容器
        AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext();

        // 将当前类作为配置类
        annotationConfigApplicationContext.register(AnnotationApplicationContextIocContainer.class);

        // 启动容器
        annotationConfigApplicationContext.refresh();

        // 获取Bean
        User bean = annotationConfigApplicationContext.getBean(User.class);

        // 关闭容器
        annotationConfigApplicationContext.close();
    }

    @Bean
    User user(){
        User user = new User();
        user.setId(1);
        user.setName("注解");
        return user;
    }
}
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。