• 23、自动装配-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
     */
    @Component
    public 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);
        }
    }
    
    

    运行:

  • 相关阅读:
    objective-c内存管理中autorelease的作用
    objective-c在Xcode中@property相关参数的解释
    objective-c中的内存管理
    c#扩展方法-摘自msdn
    objective-c中的category
    c语言中结构体的定义、初始化及内存分配
    c语言中的结构体为值类型,当把一个结构体赋值给另一个结构体时,为值传递
    手动通过Lucene判断该pom文件中jar是否存在,子依赖没判断
    代码方式删除SVN
    Maven多层嵌套
  • 原文地址:https://www.cnblogs.com/Grand-Jon/p/10040199.html
Copyright © 2020-2023  润新知