IOC - Aware 感知接口
Aware
是一个接口,空接口,作为一种标记,实现了各种 Aware 的 bean,spring 会给这个 bean 中的对应属性赋值
接口 | 作用 |
---|---|
ApplicationContextAware | 获得当前应用上下文 |
BeanNameAware | 获取容器中bean名称 |
BeanClassLoaderAware | 获得类加载器 |
BeanFactoryAware | 获得bean工厂 |
EnviromentAware | 获得环境变量 |
EnvironmentValueResolverAware | 获取spring容器加载的properties文件属性值 |
ResourceLoaderAware | 获得资源加载器 |
ApplicationEventPublisherAware | 获得应用程序发布器 |
MessageSourceAware | 获得文本信息 |
EmbeddedValueResolverAware | 获取 String Value 解析器 |
示例
-
ApplicationContextAware
通过实现
ApplicationContextAware
接口,可以让类访问 Spring 的ApplicationContext
,这使得该类能够使用 Spring 容器中的其他 bean。@Component public class MyComponent implements ApplicationContextAware { private ApplicationContext applicationContext; // 给成员变量 applicationContext 赋值 @Override public void setApplicationContext(ApplicationContext applicationContext) { this.applicationContext = applicationContext; } }
-
BeanFactoryAware
通过实现
BeanFactoryAware
接口,可以访问 Spring 的BeanFactory
,这使得类可以获得更多关于 bean 的控制。@Component public class MyBeanFactoryAware implements BeanFactoryAware { private BeanFactory beanFactory; @Override public void setBeanFactory(BeanFactory beanFactory) { this.beanFactory = beanFactory; } }
-
ServletContextAware
通过实现
ServletContextAware
接口,可以访问ServletContext
,这在Web应用中非常有用。@Component public class MyServletContextAware implements ServletContextAware { private ServletContext servletContext; @Override public void setServletContext(ServletContext servletContext) { this.servletContext = servletContext; } public void doSomething() { String contextPath = servletContext.getContextPath(); // Do something with contextPath } }
-
MessageSourceAware
通过实现
MessageSourceAware
接口,可以访问 Spring 的MessageSource
,用于国际化和本地化消息。@Component public class MyMessageSourceAware implements MessageSourceAware { private MessageSource messageSource; @Override public void setMessageSource(MessageSource messageSource) { this.messageSource = messageSource; } public void printMessage() { String message = messageSource.getMessage("my.message.code", null, "Default message", null); System.out.println(message); } }
-
ResourceLoaderAware
通过实现
ResourceLoaderAware
接口,可以获取ResourceLoader
,用于加载资源(如文件、URL等)。@Component public class MyResourceLoaderAware implements ResourceLoaderAware { private ResourceLoader resourceLoader; @Override public void setResourceLoader(ResourceLoader resourceLoader) { this.resourceLoader = resourceLoader; } public void loadResource() { // Load resource from classpath Resource resource = resourceLoader.getResource("classpath:myfile.txt"); // Process the resource } }
-
EmbeddedValueResolverAware
通过实现
ResourceLoaderAware
接口,可以获取 String Value 解析器@Component public class MyComponent implements EmbeddedValueResolverAware { @Override public void setEmbeddedValueResolver(StringValueResolver resolver) { String resolveStringValue = resolver.resolveStringValue("你好 ${os.name} 年龄:#{20*18}"); // 解析后的字符串为:你好 Windows 10 年龄:360 System.out.println("解析后的字符串为:" + resolveStringValue); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具