Spring基础(2)-ApplicationContext

本文详细介绍了Spring框架中的ApplicationContext接口及其与BeanFactory的关系。ApplicationContext不仅提供Bean管理功能,还支持生命周期管理、事件发布、国际化等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ApplicationContext是BeanFactory的子接口。
传统的用法如下

       BeanFactory factory = new XmlBeanFactory(new ClassPathResource("Beans.xml"));
        DemoBean demoBean = (DemoBean) factory.getBean("helloWorld");
        demoBean.getMessage();

这种用法在3.1版本后已经被标记为过时。所以,我们先只介绍ApplicationContext。
没有人规定一个java进程只能有一个ApplicationContext。只要你喜欢,多娶一个也没有问题,二者互不干扰。

        ApplicationContext ctx = new ClassPathXmlApplicationContext(
                new String[]{"Beans.xml"});

这里写图片描述

  • LifeCircle这个接口赋予的生命周期的功能。
public interface Lifecycle {
    void start();
    void stop();
    boolean isRunning();
}
  • MessageSource
    Spring内部的国际化信息接口

  • EnvironmentCapable
    用于获取系统参数,如JVM启动参数等等。

  • HierarchicalBeanFactory
    java的开发者很喜欢继承但是很不喜欢别人使用继承。
    没错,ApplicationContext(BeanFactory)之间是有继承关系的。

public interface HierarchicalBeanFactory extends BeanFactory {
    BeanFactory getParentBeanFactory();

    boolean containsLocalBean(String var1);
}
  • ApplicationEventPublisher
    ApplicationContext支持事件机制。
public interface ApplicationEventPublisher {
    void publishEvent(ApplicationEvent var1);

    void publishEvent(Object var1);
}

首先是一些内部定义事件。

  1. ContextRefreshedEvent:ApplicationContext被初始化或刷新时,该事件被发布。这也可以在ConfigurableApplicationContext接口中使用refresh()方法来发生。
  2. ContextStartedEvent:ConfigurableApplicationContext接口中的start()方法启动ApplicationContext时
  3. ContextStoppedEvent:当使用ConfigurableApplicationContext接口中的close()方法关闭ApplicationContext时
  4. ContextClosedEvent:当使用ConfigurableApplicationContext接口中的close()方法关闭ApplicationContext时,该事件被触发。一个已关闭的上下文到达生命周期末端;它不能被刷新或重启。

当然,如果你要把spring作为自己代码的事件机制,spring也为了准备了封装PayloadApplicationEvent

public class PayloadApplicationEvent<T> extends ApplicationEvent implements ResolvableTypeProvider {
    private final T payload;

    public PayloadApplicationEvent(Object source, T payload) {
        super(source);
        Assert.notNull(payload, "Payload must not be null");
        this.payload = payload;
    }

    public ResolvableType getResolvableType() {
        return ResolvableType.forClassWithGenerics(this.getClass(), new ResolvableType[]{ResolvableType.forInstance(this.getPayload())});
    }

    public T getPayload() {
        return this.payload;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值