当前位置: 首页 > news >正文

spring ApplicationContext 继承的这些接口作用,示例,表格对比

各接口作用及代码示例


1. EnvironmentCapable

作用:提供对运行环境的访问,如系统属性、配置属性等。

// 配置类
@Configuration
public class AppConfig {
    @Value("${app.message:Hello World}") // 默认值为Hello World
    private String message;
}

// 使用示例
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
Environment environment = context.getEnvironment();
String appMessage = environment.getProperty("app.message"); // 获取配置属性
System.out.println("App Message: " " + appMessage); // 输出:Hello World

2. ListableBeanFactory

作用:通过名称或类型列举/查找Bean。

// 配置类
@Configuration
public class AppConfig {
    @Bean
    public Service service1() { return new Service("Service1"); }
    
    @Bean
    public Service service2() { return new Service("Service2"); }
}

// 使用示例
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
Map<String, Service> services = context.getBeansOfType(Service.class);
System.out.println("Services: " + services.size()); // 输出:2

3. HierarchicalBeanFactory

作用:支持分层配置,允许子工厂覆盖父级属性。

// 配置父工厂
GenericApplicationContext parent = new GenericApplicationContext();
parent.refresh();

// 配置子工厂并设置父级
GenericApplicationContext child = new GenericApplicationContext(parent);
child.getBeanFactory().registerSingleton("overrideBean", new OverrideBean());
child.refresh();

// 获取子工厂中的Bean(优先使用子级配置)
OverrideBean bean = child.getBean(OverrideBean.class); // 使用子级的配置

4. MessageSource

作用:国际化资源管理,获取本地化消息。

// 配置类
@Configuration
public class AppConfig {
    @Bean
    public MessageSource messageSource() {
        ResourceBundleMessageSource source = new ResourceBundleMessageSource();
        source.setBasename("messages"); // 国际化文件名
        return source;
    }
}

// 使用示例
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
String greeting = context.getMessage("greeting", null, Locale.US); // 从messages.properties获取
System.out.println("Greeting: " + greeting); // 输出:Hello!

5. ApplicationEventPublisher

作用:发布应用事件,支持事件监听机制。

// 自定义事件
public class CustomEvent extends ApplicationEvent {
    public CustomEvent(Object source, String data) {
        super(source);
        this.data = data;
    }
    private String data;
}

// 监听器
@Component
public class EventListener implements ApplicationListener<CustomEvent> {
    @Override
    public void onApplicationEvent(CustomEvent event) {
        System.out.println("Received event: " + event.getData());
    }
}

// 发布事件
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
context.publishEvent(new CustomEvent(this, "Event occurred!")); // 触发监听器

6. ResourcePatternResolver

作用:通过通配符解析资源路径。

// 使用示例
ApplicationContext context = new ClassPathXmlApplicationContext();
Resource[] resources = context.getResources("classpath*:/*.properties");
for (Resource resource : resources) {
    System.out.println("Found resource: " + resource.getFilename()); // 输出所有匹配的文件名
}

接口功能对比表格

接口名称核心功能关键方法典型使用场景
EnvironmentCapable访问系统/配置环境属性getEnvironment()读取配置文件或系统属性
ListableBeanFactory按名称/类型查找BeangetBeansOfType()动态获取所有实现类Bean
HierarchicalBeanFactory支持分层配置覆盖setParentBeanFactory()多环境配置继承与覆盖
MessageSource国际化消息解析getMessage()多语言提示信息管理
ApplicationEventPublisher发布应用事件publishEvent()实现事件驱动架构
ResourcePatternResolver通配符资源路径解析getResources()批量加载配置文件或静态资源

总结

  • EnvironmentCapable:环境属性访问,如读取application.properties
  • ListableBeanFactory:动态查找Bean,适合需要按类型聚合的场景。
  • HierarchicalBeanFactory:分层配置,适用于多环境部署。
  • MessageSource:国际化支持,如多语言应用。
  • ApplicationEventPublisher:事件驱动,解耦组件间通信。
  • ResourcePatternResolver:批量加载资源,如扫描所有配置文件。

相关文章:

  • 华为单臂路由 与 策略路由
  • SpringCould微服务架构之Docker(4)
  • chrome插件开发之API解析-chrome.scripting.executeScript()
  • 基于网启PXE服务器的批量定制系统平台(详细版)
  • 智启人文新篇:生成式人工智能(GAI)认证驱动文科教育数字化转型与跨界融合
  • 2025-03-27 学习记录--C/C++-C语言 头插法插入单链表
  • Docker技术系列文章,第十篇——Docker 集群与编排(以 Kubernetes 为例)
  • mysql sql语句orderby,groupby优化
  • 电力物联网数据采集装置 高精度电能计量表
  • 手写数据库MYDB(一):项目启动效果展示和环境配置问题说明
  • 【蓝桥杯】算法笔记1
  • vue项目中播放ws(Websocket协议)视频流
  • AI时代的数据底座:火山引擎多模态数据湖的设计与实践
  • 英语不好,可以考取Oracle OCP认证吗?
  • 闭包、装饰器学习笔记(第二次学习)
  • 【老电脑翻新】华硕A456U(换电池+换固态+光驱换机械+重装系统+重装系统后开始菜单失灵问题解决)
  • 高质量思维链(CoT)数据助力Deepseek成为国产大模型之光
  • Maven 中 maven.test.skip 与skipTests 区别
  • 实战 | 基于 SpringBoot + UniApp 打造国际版打车系统:架构设计与性能优化全解析
  • 关于ArcGIS中加载影像数据,符号系统中渲染参数的解析
  • 网站建设龙卡要审批多久时间/如何做网络销售产品
  • 建设银行杭州分行网站/新手seo要学多久
  • 织梦网站做自动生成地图/沈阳百度推广排名优化
  • dreamweaver的优点/抖音seo排名软件哪个好
  • 可信赖的坪山网站建设/查权重网站
  • 如何建设简易网站/手机系统流畅神器