Spring Framework 基础(03) —— Spring 容器

常用的 Spring 容器

Spring 容器是生成 Bean 实例的工厂,并管理容器中 Bean 的生命周期。
Spring 有两个核心接口:BeanFactory 以及它的子接口 ApplicationContext。它们都可以代表 Spring 容器。

  • BeanFactory 的常用实现类是 DefaultListableBeanFactory.
  • ApplicationContext 的常用实现类是 FileSystemXmlApplicationContext、ClassPathXmlApplicationContext 和 AnnotationConfigApplicationContext。
  • Web 应用中常用的 Spring 容器有 XmlWebApplicationContext 和 AnnotationConfigWebApplicationContext 两个实现类。

Spring 容器的创建方式

对于 BeanFactory 而言,一般采用如下方式:

// 搜索类加载路径下的 beans.xml 文件创建 Resource 对象
Resource resource = new ClassPathResource("beans.xml");
// 创建默认的 BeanFactory 容器
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
// 让默认的 BeanFactory 容器加载 resource 对应的 XML 配置文件
new XmlBeanDefinitionReader(beanFactory).loadBeanDefinitions(resource);

对于 ApplicationContext 而言,一般采用如下方式:

 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

如果需要同时加载多个XML配置文件来创建 Spring 容器,则可以采用如下方式:

 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml", "service.xml");

ApplicationContext 和 BeanFactory 的对比

ApplicationContext 本身就是 BeanFactory 的子接口,并增强了其功能。
除了提供 BeanFactory 所支持的全部功能之外,还有如下额外的功能:

  • ApplicationContext 默认会预初始化所有的 singleton 的 Bean。
  • ApplicationContext 集成 MessageSource 接口,提供国际化功能。
  • 资源访问,比如访问 URL 和文件。
  • 事件机制。
  • 同时加载多个配置文件。
  • 以声明式方式启动并创建 Spring 容器。

ApplicationContext 的国际化支持

待补充…

ApplicationContext 的事见机制

待补充…

在 Bean 中获取 Spring 容器

接口注入:让 Bean 实现 BeanFactoryAware 接口,使用 setBeanFactory 方法获取 Spring 容器。
例如
类 Axe

public class Axe implements ApplicationContextAware {
    // 使用成员变量保存它所在的 ApplicationContext 容器
    public ApplicationContext ctx;

    @Override
    public void setApplicationContext(ApplicationContext ctx) throws BeansException {
        this.ctx = ctx;
    }

    public String chop(){
        Person person = ctx.getBean(Person.class);
        person.getDate();
        return "use an axe to chop wood";
    }
}

Spring 容器在检测到某个 Bean 实现了 ApplicationContextAware 接口,就会在创建该 Bean 之后,自动掉调用 Bean 的setApplicationContext 方法。这种方式就是接口注入。

Spring 容器中的 Bean

待补充…

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值