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、案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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 {
 
}

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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();
        }
    }
}

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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   anpeiyong  阅读(118)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示