Spring Aware

Spring的依赖注入最大亮点就是你所拥有的Bean对Spring容器的存在是没有意识的。即你可以将你的容器换成别的容器,如GOOGLE Guice,这时Bean之间的耦合度降低。

但是在实际的项目中,你不可避免的要用到Spring容器本身的资源,这时你的Bean必须要意识到Spring容器的存在,才能调用Spring所提供的资源,这就是所谓的Spring Aware。其实Spring Aware本来就是Spring设计用来框架内部使用的,如果使用了Spring Aware,那么你的Bean其实将会和Spring框架耦合。



那spring为我们提供了哪些Aware接口呢》

BeanNameAware  获得容器中Bean的名称
BeanFactoryAware 获得当前的bean factory,这样就可以调用容器的服务
ApplicationContextAware* 获得当前的application context,这样就可以调用容器的服务
MessageSourceAware 获得message source,这样就可以会的文本信息
ApplicationEventPublisherAware 应用事件发布器,可以发布事件
ResourceLoaderAware 获得资源加载器,可以获得外部资源文件


Spring Aware的目的就是为了Bean获得Spring容器的服务。因为ApplicationContext接口集成了MessageSource接口,ApplicationEventPublisher接口和ResourceLoader接口,所以Bean集成了ApplicationContextAware接口就可以获得Spring容器的所有服务,但原则上我们还是用到什么接口,就实现什么接口。



示例如下:

(1)在lwh.highlight_spring4.ch3.aware下创建一个test.txt,内容随意,给下面的外部资源加载使用

(2)Spring Aware演示Bean

package com.lwh.highlight_spring4.ch3.aware;

import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.context.ResourceLoaderAware;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Service;

/**
 * Created by luwenhu on 2017/9/20.
 */
//实现了BeanNameAware,ResourceLoaderAware接口,获得了Bean名称和加载资源的服务
@Service
public class AwareService implements BeanNameAware,ResourceLoaderAware{

    private String beanName;
    private ResourceLoader loader;

    @Override
    public void setBeanName(String name) {
        this.beanName = name;
    }

    @Override
    public void setResourceLoader(ResourceLoader resourceLoader) {
        this.loader = resourceLoader;
    }

    public void outputResult(){
        System.out.println("Bean的名称是:"+beanName);
        Resource resource = loader.getResource("classpath:com/lwh/highlight_spring4/ch3/aware/test.txt");
        try{
            String string = IOUtils.toString(resource.getInputStream());
            System.out.println("ResourceLoader加载的内容为:"+string);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

(3)配置类

package com.lwh.highlight_spring4.ch3.aware;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * Created by luwenhu on 2017/9/20.
 */
@Configuration
@ComponentScan("com.lwh.highlight_spring4.ch3.awar")
public class AwareConfig {
}

(4)运行类

package com.lwh.highlight_spring4.ch3.aware;

import com.lwh.highlight_spring4.ch1.aop.AopConfig;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * Created by luwenhu on 2017/9/20.
 */
public class Main {
    public  static void main(String[] args){
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AwareService.class);
        AwareService awareService = context.getBean(AwareService.class);
        awareService.outputResult();
        context.close();
    }
}

(5)运行结果

时间: 2024-10-08 07:54:21

Spring Aware的相关文章

Spring Boot教程9——Spring Aware

Spring的依赖注入的最大亮点就是你所有的Bean对Spring容器的存在是没有意识的,即你可以将你的容器换成别的容器,如Google Guice.但在实际项目中,你不可避免的要用到Spring容器本身的功能资源,这时你的Bean必须要意识到Spring容器的存在,才能调用Spring所提供的资源,这就是所谓的Spring Aware.其实Spring Aware本来就是Spring设计用来框架内部使用的,若使用了Spring Aware,你的Bean将会和Spring框架耦合. Spring

bean创建过程、spring BeanFactory的实现、spring aware

Bean的创建过程: Spring beanFactory的工厂模式实现: 解析<bean>标签,存到一个Map<String, Object> beans中 People o = (People)factory.getBean("p"); 因为map存的是object类型,所以取出时需要强制类型转换 Bean的生命周期: spring aware的目的是为了让Bean获得spring容器的服务,bean继承applicationContextAware可以获得

Spring Aware获取Bean和其他对象

Spring的容器托管了所有bean,实际项目中我们经常会用到容器中的功能资源,这时候就用到了 Spring Aware.简单来说,就是Spring Aware可以帮助你获取到Spring容器中的Bean或者其他资源. Spring 提供的Aware接口如下: BeanNameAware    :获取到容器中Bean的名称 BeanFactoryAware   :获得当前bean factory,这样可以调用容器的服务 ApplicationContextAware*    :当前的Applic

Spring Bean Life Cycle Methods – InitializingBean, DisposableBean, @PostConstruct, @PreDestroy and *Aware interfaces

Spring Beans are the most important part of any Spring application. Spring ApplicationContext is responsible to initialize the Spring Beans defined in spring bean configuration file. Spring Context is also responsible for injection dependencies in th

Spring Boot入门教程大纲

Spring Boot教程之Spring基础 Spring Boot教程1--Spring概述 Spring Boot教程2--Spring项目快速搭建 Spring Boot教程3--Spring基础配置 Spring Boot教程之Spring常用配置 Spring Boot教程4--@Scope注解 Spring Boot教程5--Spring EL-Spring表达式语言 Spring Boot教程6--Bean的初始化和销毁 Spring Boot教程7--Profile Spring

《Spring Boot实战》笔记(目录)

目录 目 录第一部分 点睛Spring 4.x第1 章 Spring 基础 ............................................................................................................. 21.1 Spring 概述 .......................................................................................

利用相关的Aware接口

Struts 2提供了Aware接口.Aware为"感知"的意思,实现了相关Aware接口的Action能够感知相应的资源.Struts在实例化一个Action实例时,如果发现它实现了相应的Aware接口,会把相应的资源通过Aware接口方法注射进去.这种方式也可以叫做注射方式(IoC方式). Servlet API中常用对象application.request.response.Session对应的Aware接口分别为ServletContextAware.ServletReque

Spring高级话题

Spring Aware 在实际项目中,你不可避免的要用到spring容器本身的功能资源,这时你的bean要意识到spring容器的存在,才能调用spring提供的资源.spring aware本来就是spring设计用来框架内部使用的.若使用spring aware,你的Bean将会与srping框架耦合. 多线程 配置类 任务执行类 计划任务 条件注解@Conditional 组合注解 测试 拦截器 原文地址:https://www.cnblogs.com/duan2/p/9219157.h

Spring高级话题(1)

所有代码示例必须配置好Spring Spring项目的快速搭建. 1.Apring Aware 1.1.理论 Spring Aware的目的就是为了让Bean获得Spring容器的服务. Spring 提供的Aware接口: BeanNameAware:获得容器中的Bean的名称: BeanFactoryAware:获得当前bean factory,这样容易调用容器服务: ApplicationContextAware*:获得当前application context,这样容易调用容器服务: M