自动装配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);

}

}

运行:

 

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

 

结合以下文字看更有感觉:


Spring源码解析:Spring Aware 原理解析
https://blog.csdn.net/qq_24210767/article/details/90146173

spring4.1.8扩展实战之二:Aware接口揭
https://blog.csdn.net/boling_cavalry/article/details/81611426


自动装配-Aware注入Spring底层组件&原理
https://www.cnblogs.com/Grand-Jon/p/10040199.html


Spring Aware 到底是什么?
https://www.cnblogs.com/FraserYu/p/11211235.html
 

 

 

以上是 自动装配Aware注入Spring底层组件&原理 的全部内容, 来源链接: utcz.com/z/510481.html

回到顶部