千家信息网

如何自动装配-Aware注入Spring底层组件及原理

发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,本篇内容主要讲解"如何自动装配-Aware注入Spring底层组件及原理",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何自动装配-Aware注入Spri
千家信息网最后更新 2025年02月05日如何自动装配-Aware注入Spring底层组件及原理

本篇内容主要讲解"如何自动装配-Aware注入Spring底层组件及原理",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何自动装配-Aware注入Spring底层组件及原理"吧!

23、自动装配-Aware注入Spring底层组件&原理

  • Aware 接口,提供了类似回调函数的功能

  • 自定义组件想要使用Spring 容器底层的一些组件(Application Context,Bean Factory);自定义组件需要实现xxxAware接口;在创建对象的时候,会调用接口规定的方法注入相关组件

package org.springframework.beans.factory;public interface Aware {}
23.1 ApplicationContextAware 自动注入IOC容器
package org.springframework.context;import org.springframework.beans.BeansException;import org.springframework.beans.factory.Aware;public interface ApplicationContextAware extends Aware {    void setApplicationContext(ApplicationContext applicationContext) throws BeansException;}
23.2 ApplicationEventPublisherAware 注入事件派发器
package org.springframework.context;import org.springframework.beans.factory.Aware;public interface ApplicationEventPublisherAware extends Aware {    void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher);}
23.3 BeanClassLoaderAware 类加载器
package org.springframework.beans.factory;public interface BeanClassLoaderAware extends Aware {    void setBeanClassLoader(ClassLoader classLoader);}
23.4 BeanFactoryAware Bean工厂
package org.springframework.beans.factory;import org.springframework.beans.BeansException;public interface BeanFactoryAware extends Aware {    void setBeanFactory(BeanFactory beanFactory) throws BeansException;}
23.5 BeanNameAware Bean名字
package org.springframework.beans.factory;public interface BeanNameAware extends Aware {    void setBeanName(String name);}
23.6 EmbeddedValueResolverAware Embedded值解析器
package org.springframework.context;import org.springframework.beans.factory.Aware;import org.springframework.util.StringValueResolver;public interface EmbeddedValueResolverAware extends Aware {    void setEmbeddedValueResolver(StringValueResolver resolver);}
23.7 EnvironmentAware 环境
package org.springframework.context;import org.springframework.beans.factory.Aware;import org.springframework.core.env.Environment;public interface EnvironmentAware extends Aware {    void setEnvironment(Environment environment);}
23.8 ImportAware 导入相关的
package org.springframework.context.annotation;import org.springframework.beans.factory.Aware;import org.springframework.core.type.AnnotationMetadata;public interface ImportAware extends Aware {    void setImportMetadata(AnnotationMetadata importMetadata);}
23.9 LoadTimeWeaverAware 导入相关的
package org.springframework.context.weaving;import org.springframework.beans.factory.Aware;import org.springframework.instrument.classloading.LoadTimeWeaver;public interface LoadTimeWeaverAware extends Aware {    void setLoadTimeWeaver(LoadTimeWeaver loadTimeWeaver);}
23.10 MessageSourceAware 国际化
package org.springframework.context;import org.springframework.beans.factory.Aware;public interface MessageSourceAware extends Aware {    void setMessageSource(MessageSource messageSource);}
23.11 NotificationPublisherAware 发送通知的支持
package org.springframework.jmx.export.notification;import org.springframework.beans.factory.Aware;public interface NotificationPublisherAware extends Aware {    void setNotificationPublisher(NotificationPublisher notificationPublisher);}
23.12 ResourceLoaderAware 资源加载器
package org.springframework.context;import org.springframework.beans.factory.Aware;import org.springframework.core.io.ResourceLoader;public interface ResourceLoaderAware extends Aware {    void setResourceLoader(ResourceLoader resourceLoader);}
23.13 测试用例
package com.hw.springannotation.beans;import org.springframework.beans.BeansException;import org.springframework.beans.factory.BeanNameAware;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.context.EmbeddedValueResolverAware;import org.springframework.stereotype.Component;import org.springframework.util.StringValueResolver;/** * @Description TODO * @Author hw * @Date 2018/11/28 15:44 * @Version 1.0 */@Componentpublic class Red implements ApplicationContextAware, BeanNameAware, EmbeddedValueResolverAware {    private ApplicationContext applicationContext;    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {        System.out.println("传入的IOC " + applicationContext);        this.applicationContext = applicationContext;    }    public void setBeanName(String name) {        System.out.println("当前bean的名字" + name);    }    public void setEmbeddedValueResolver(StringValueResolver resolver) {        String value = resolver.resolveStringValue("你好${os.name} 我是#{20*20}");        System.out.println("解析的字符串:" + value);    }}

运行:

说白了 Aware接口类,就是一个回调类的抽象

到此,相信大家对"如何自动装配-Aware注入Spring底层组件及原理"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0