spring(五):spring中Aware接口的使用

spring中自定义组件需要使用spring的底层组件时,可以通过自定义组件实现相关XxxAware接口,重写其中的方法进而实现

例如:自定义一个组件,该组件中需要使用ApplicationContext、BeanFactory,那么我们就可以通过实现ApplicationContextAware、BeanFactoryAware接口实现

ApplicationContextAware

public class MyAware implements ApplicationContextAware {
    private ApplicationContext applicationContext;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println("传入的IOC容器applicationContext = [" + applicationContext + "]");
        this.applicationContext = applicationContext;
    }
}
@Configuration
public class AwareConfig {
    @Bean
    public MyAware myAware(){
        return new MyAware();
    }
}
public class TestAware {
    @Test
    public void testM(){
        ApplicationContext context = new AnnotationConfigApplicationContext(AwareConfig.class);
        System.out.println("context = " + context);
    }
}

结果
传入的IOC容器applicationContext = [org.spring[email protected]2ff5659e: startup date [Wed May 29 14:00:42 GMT+08:00 2019]; root of context hierarchy]
context = org.spring[email protected]2ff5659e: startup date [Wed May 29 14:00:42 GMT+08:00 2019]; root of context hierarchy

BeanNameAware

public class MyAware implements BeanNameAware{

    @Override
    public void setBeanName(String name) {
        System.out.println("name = [" + name + "]");
    }
}

结果
name = [myAware]
context = org.spring[email protected]2ff5659e: startup date [Wed May 29 14:07:16 GMT+08:00 2019]; root of context hierarchy

EmbeddedValueResolverAware

public class MyAware implements EmbeddedValueResolverAware{

    @Override
    public void setEmbeddedValueResolver(StringValueResolver stringValueResolver) {
        String value = stringValueResolver.resolveStringValue("当前操作系统:${os.name},10-9=#{10-9}");
        System.out.println("value = " + value);
    }
}

结果
value = 当前操作系统:Windows 10,10-9=1
context = org.spring[email protected]2ff5659e: startup date [Wed May 29 14:13:11 GMT+08:00 2019]; root of context hierarchy

其它XxxAware用法类似

通过Aware可以把spring底层组件注入到自定义的bean中,再用相应的processor处理器处理

ApplicationContextAware是利用ApplicationContextAwareProcessor来处理的,XxxAware也有相应的processor进行处理,其实就是相关后置处理器完成处理工作

原文地址:https://www.cnblogs.com/qf123/p/10943514.html

时间: 2024-10-01 04:33:34

spring(五):spring中Aware接口的使用的相关文章

spring中aware接口的

一.关于spring中Aware结尾接口介绍: Spring中提供一些Aware结尾相关接口,像是BeanFactoryAware. BeanNameAware.ApplicationContextAware.ResourceLoaderAware.ServletContextAware等等. 实现这些 Aware接口的Bean在被实例化 之后,可以取得一些相对应的资源,例如实现BeanFactoryAware的Bean在实例化后,Spring容器将会注入BeanFactory的实例,而实现Ap

spring中的aware接口

1.实现了相应的aware接口,这个类就获取了相应的资源. 2.spring中有很多aware接口,包括applicationContextAware接口,和BeanNameAware接口. 实现了这些接口的类,然后,这类中就包含了applicationContext对象的引用.BeanNameAware接口就是返回此bean的名字而已,一个string 3.applicationContext就是ioc容器,其实现了BeanFactory,可以解析xml里的各种bean,并把这些bean存储在

spring中一些aware接口

Spring中提供一些Aware相关接口,像是BeanFactoryAware. ApplicationContextAware.ResourceLoaderAware.ServletContextAware等等,实现这些 Aware接口的Bean在被初始之后,可以取得一些相对应的资源,例如实现BeanFactoryAware的Bean在初始后,Spring容器将会注入BeanFactory的实例,而实现ApplicationContextAware的Bean,在Bean被初始后,将会被注入 A

[Java面试五]Spring总结以及在面试中的一些问题.

1.谈谈你对spring IOC和DI的理解,它们有什么区别? IoC Inverse of Control 反转控制的概念,就是将原本在程序中手动创建UserService对象的控制权,交由Spring框架管理,简单说,就是创建UserService对象控制权被反转到了Spring框架 DI:Dependency Injection 依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件 面试题: IoC 和 DI的区别? IoC 控制反转,指将对象的创建权,反

Spring 中的接口知识整理

本想每个小知识一篇随笔,但是那样,看起来有些单薄,所以,就放在一片文章里了.而且,以后还会慢慢在最后不断的追加. 目录: FactoryBean BeanPostProcessor 1.FactoryBean FactoryBean接口,它在Spring框架源码内部,被大量使用,如使用AOP创建bean的代理时,使用了ProxyFactoryBean:从JNDI中查找对象时,使用了JndiObjectFactoryBean. 它在框架外,很少使用.但是为了学习,也得研究研究,您说是不? 它怎么使

Spring中Ordered接口简介

前言 Spring中提供了一个Ordered接口.Ordered接口,顾名思义,就是用来排序的. Spring是一个大量使用策略设计模式的框架,这意味着有很多相同接口的实现类,那么必定会有优先级的问题. 于是,Spring就提供了Ordered这个接口,来处理相同接口实现类的优先级问题. Ordered接口介绍 首先,我们来看下Ordered接口的定义: public interface Ordered { int HIGHEST_PRECEDENCE = Integer.MIN_VALUE;

spring中ApplicationContextAware接口使用理解

一.这个接口有什么用?当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得ApplicationContext中的所有bean.换句话说,就是这个类可以直接获取spring配置文件中,所有有引用到的bean对象.二.怎么使用这个接口?例如我有一个方法类AppUtil,这个方法类中需要使用到的ApplicationContext中的某个bean(companyService).一.因为spring要建立属于自己的容器,就必须要加载自己的配置文件.这个时

通过拦截器Interceptor实现Spring MVC中Controller接口访问信息的记录

java web工程项目使用了Spring+Spring MVC+Hibernate的结构,在Controller中的方法都是用于处理前端的访问信息,Controller通过调用Service进行业务处理后给前端返回ModelAndView对象或者只返回Json格式数据.如果能够获得Http请求在后端程序中处理的相关信息,对于开发和调试时十分方便的.工程中使用了Spring MVC的Interceptor对所有Http请求及其响应进行拦截,从而获取到本次访问接口信息以及程序处理时长等信息,特意在

Spring Cloud Zuul中使用Swagger汇总API接口文档

有很多读者问过这样的一个问题:虽然使用Swagger可以为Spring MVC编写的接口生成了API文档,但是在微服务化之后,这些API文档都离散在各个微服务中,是否有办法将这些接口都整合到一个文档中? 如果您还不了解Spring Cloud Zuul和Swagger,建议优先阅读下面两篇,有一个初步的了解: Spring Cloud构建微服务架构:服务网关(基础) Spring Boot中使用Swagger2构建强大的RESTful API文档 准备工作 上面说了问题的场景是在微服务化之后,所