IOC - Aware 感知接口

Aware

是一个接口,空接口,作为一种标记,实现了各种 Aware 的 bean,spring 会给这个 bean 中的对应属性赋值

接口 作用
ApplicationContextAware 获得当前应用上下文
BeanNameAware 获取容器中bean名称
BeanClassLoaderAware 获得类加载器
BeanFactoryAware 获得bean工厂
EnviromentAware 获得环境变量
EnvironmentValueResolverAware 获取spring容器加载的properties文件属性值
ResourceLoaderAware 获得资源加载器
ApplicationEventPublisherAware 获得应用程序发布器
MessageSourceAware 获得文本信息
EmbeddedValueResolverAware 获取 String Value 解析器

示例

  1. 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;
        }
    }
    
  2. BeanFactoryAware

    通过实现 BeanFactoryAware 接口,可以访问 Spring 的 BeanFactory,这使得类可以获得更多关于 bean 的控制。

    @Component
    public class MyBeanFactoryAware implements BeanFactoryAware {
        private BeanFactory beanFactory;
    
        @Override
        public void setBeanFactory(BeanFactory beanFactory) {
            this.beanFactory = beanFactory;
        }
    }
    
  3. 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
        }
    }
    
  4. 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);
        }
    }
    
  5. 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
        }
    }
    
  6. 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);
        }
    }
    
posted @   CyrusHuang  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示