Spring高级运用之浅析Spring Aware

我们应该明白,Spring的依赖注入的最大亮点是你所有的Bean对Spring容器的存在是没有意识的,我们可以将Spring容器换成其他的容器,Spring容器中的Bean的耦合度因此也是极低的。

但是我们在实际的开发中,我们却经常要用到Spring容器本身的功能资源,所以Spring容器中的Bean此时就要意识到Spring容器的存在才能调用Spring所提供的资源。我们通过Spring提供的一系列接口Spring Aware来实现具体的功能。

首先介绍一下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容器的所有服务。

例如: 
首先在com.fuyunwang.aware包下面创建一个test.txt,内容任意指定。 
之后在当前包下创建Spring Aware:

@Service
public class AwareService implements BeanNameAware, ResourceLoaderAware {

    private String beanName;
    private ResourceLoader loader;



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

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

    public void outputResult() throws IOException{
        System.out.println("Bean的名称是:"+beanName);
        Resource resource=loader.getResource("classpath:com/fuyunwang/aware/test.txt");
        System.out.println("ResourceLoader加载的文件内容是:");
        String line=null;
        BufferedReader reader=new BufferedReader(new InputStreamReader(resource.getInputStream()));
        while((line=reader.readLine())!=null){
            System.out.println(line);
        }
        reader.close();
    }
}

在com.fuyunwang.config包下创建配置类:

@Configuration
@ComponentScan(basePackages="com.fuyunwang")
public class AwareConfig {
}

测试类中编写代码测试:

AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(AwareConfig.class);
AwareService service=context.getBean(AwareService.class);
service.outputResult();
context.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值