Spring---Spring Aware

1、概述

    1.1、Spring中的  所有Bean  对Spring容器的存在  是没有意识的(即你可以将容器换成别的容器,这样使用容器与Bean之间的耦合度很低);

        但在实际项目中,不可避免的要用到Spring容器本身的功能资源,这时Bean必须意识到Spring容器的存在,才能调用Spring提供的资源,这就是Spring Aware

          (Spring Aware本身就是Spring设计用来框架内部使用的,若使用了Spring Aware,你的Bean将会与Spring框架耦合)

    1.2、案例

package com.an.config;

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

/**
 * @description:
 * @author: anpeiyong
 * @date: Created in 2019/11/19 17:27
 * @since:
 */
@Configuration
@ComponentScan(value = "com.an")
public class AwareConfig {

}

 

package com.an.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.Component;

/**
 * @description: 实现BeanNameAware,ResourceLoaderAware接口,获得Bean名称服务、资源加载服务
 * @author: anpeiyong
 * @date: Created in 2019/11/19 17:20
 * @since:
 */
@Component
public class AwareService implements BeanNameAware, ResourceLoaderAware {

    private String beanName;
    private ResourceLoader resourceLoader;

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

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

    public void outputResult(){
        System.out.println("BeanName:"+beanName);
        Resource resource =resourceLoader.getResource("classpath:test.properties");
        try {
            System.out.println("ResourceLoader加载的文件内容:");
            System.out.println(IOUtils.toString(resource.getInputStream()));
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

  

package com.an.main;

import com.an.aware.AwareService;
import com.an.config.AwareConfig;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * @description:
 * @author: anpeiyong
 * @date: Created in 2019/11/19 17:28
 * @since:
 */
public class AwareMainTest {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext annotationConfigApplicationContext=new AnnotationConfigApplicationContext(AwareConfig.class);
        AwareService awareService=annotationConfigApplicationContext.getBean(AwareService.class);
        awareService.outputResult();
        annotationConfigApplicationContext.close();
    }

}

  

结果:

ResourceLoader加载的文件内容:
book.name=jackson
book.author=rose

 

posted on 2019-11-19 17:20  anpeiyong  阅读(118)  评论(0编辑  收藏  举报

导航