Spring基础(2)-ApplicationContext

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;
    }
}

猜你喜欢

转载自blog.csdn.net/define_us/article/details/80896021