1. 共同点
2. 区别
- 1.ApplicationContext不生产Bean,而是通知BeanFactory来生产,getBean是一个表面方法。
- 2. ApplicationContext会自动把配置的bean注册进来。
- 3.ApplicationContext会加载环境变量。
- 4.ApplicationContext支持多语言。
- 5.ApplicationContext实现事件监听。
- 6.ApplicationContext注册了很多对外的扩展点。
3. 关系
- 1.ApplicationContext实现了BeanFactory接口。
4. 类关系图

5. ApplicationContext实现的接口
5.1 MessageSource
5.1.1 说明
5.1.2 接口源码
package org.springframework.context;
import java.util.Locale;
import org.springframework.lang.Nullable;
public interface MessageSource {
@Nullable
String getMessage(String var1, @Nullable Object[] var2, @Nullable String var3, Locale var4);
String getMessage(String var1, @Nullable Object[] var2, Locale var3) throws NoSuchMessageException;
String getMessage(MessageSourceResolvable var1, Locale var2) throws NoSuchMessageException;
}
5.1.3 代码示例
package com.learning;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.scheduling.annotation.EnableScheduling;
import java.util.Locale;
/**
* @Author wangyouhui
**/
@SpringBootApplication
@EnableCaching
@EnableScheduling
public class SpringBootLearningApplication {
public static void main(String[] args) {
ConfigurableApplicationContext configurableApplicationContext = SpringApplication.run(SpringBootLearningApplication.class, args);
System.out.println(configurableApplicationContext.getMessage("hi", null, Locale.CHINA));
System.out.println(configurableApplicationContext.getMessage("hi", null, Locale.ENGLISH));
}
}
5.1.4 示例截图
5.2 ResourcePatternResolver
5.2.1 说明
- 1.通配符匹配资源(磁盘、类路径获取的文件)的能力。
- 2.classpath是在类路径中查找,若在jar包中则找不到,加*可在jar中查找,即classpath*。
5.2.2 代码示例
package com.learning;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.io.Resource;
import java.io.IOException;
@SpringBootApplication
public class SpringBootLearningApplication {
public static void main(String[] args) throws IOException {
ConfigurableApplicationContext configurableApplicationContext = SpringApplication.run(SpringBootLearningApplication.class, args);
Resource[] resources = configurableApplicationContext.getResources("classpath*:META-INF/spring.factories");
for (Resource resource : resources) {
System.out.println(resource);
}
}
}
5.2.3 截图示例

6.3 ApplicationEventPublisher
5.3.1 说明
5.3.2 代码示例
package com.learning.component;
import com.learning.event.UserRegisterEvent;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class ComponentTwo {
@EventListener
public void sendMessage(UserRegisterEvent event){
log.info("{}", event);
log.info("发送短信");
}
}
package com.learning.event;
import org.springframework.context.ApplicationEvent;
public class UserRegisterEvent extends ApplicationEvent {
public UserRegisterEvent(Object source) {
super(source);
}
}
package com.learning.component;
import com.learning.event.UserRegisterEvent;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class ComponentOne {
@Autowired
private ApplicationContext applicationContext;
public void register(){
log.info("用户注册");
applicationContext.publishEvent(new UserRegisterEvent(this));
}
}
package com.learning;
import com.learning.component.ComponentOne;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import java.io.IOException;
@SpringBootApplication
public class SpringBootLearningApplication {
public static void main(String[] args) throws IOException {
ConfigurableApplicationContext configurableApplicationContext = SpringApplication.run(SpringBootLearningApplication.class, args);
ComponentOne componentOne = configurableApplicationContext.getBean(ComponentOne.class);
componentOne.register();
}
}
5.3.3 效果示例

5.4 EnvironmentCapable
5.4.1 说明
- 1.读取系统环境变量、*.yml文件、*.property文件信息。
5.4.2 代码示例
package com.learning;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import java.io.IOException;
@SpringBootApplication
public class SpringBootLearningApplication {
public static void main(String[] args) {
ConfigurableApplicationContext configurableApplicationContext = SpringApplication.run(SpringBootLearningApplication.class, args);
String javaHome = configurableApplicationContext.getEnvironment().getProperty("java_home");
String port = configurableApplicationContext.getEnvironment().getProperty("server.port");
System.out.println(javaHome);
System.out.println(port);
}
}
5.4.3 截图示例
