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;
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值