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
 
                    
                     
                    
                 
                    
                 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号