zoukankan      html  css  js  c++  java
  • 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);
        }
    }
    
    

    运行:

  • 相关阅读:
    从一道比较奇葩的笔试题说起
    如何用一个语句判断一个整数是不是二的整数次幂——从一道简单的面试题浅谈C语言的类型提升(type promotion)
    C指针(转)
    raspberry-常用命令
    raspberry-同路由器用putty和vnc桌面登录方法
    结对编程-黄金点游戏
    软件工程第一次作业
    Python机器学习(9)——聚类算法之K均值
    Python机器学习(8)——推荐算法之推荐矩阵
    Python机器学习(7)——SVM支持向量机
  • 原文地址:https://www.cnblogs.com/Grand-Jon/p/10040199.html
Copyright © 2011-2022 走看看