• SpringAware


    哈哈,终于把分布式的课程演讲给混过去了,下面开始随便自己学点东西。

    正题:SpringAware--------在实际项目中,用到spring容器的本省功能资源,这是Bean必须意识到Spring容器的存在,才能调用Spring容器所提供的资源,这就是所谓的Spring Aware.

    分两部分,一部分演示书上的列子,一部分用SpringBoot改进,注此列是参照SpringBoot的一本书学习而来,具体不记得了。

     一    BeanNameAware--------------获得容器中Bean的名字

       BeanFactoryAware------------获得当前容器的BeanFactory,这样可以调用容器的服务

       ApplicationContextAware-----获得当前容器的ApplicationContext,这样可以调用容器的服务

       ApplicationEventPublisherAware----应用时间发布器,可以发布事件

       ResourceLoaderAware-------获得资源加载器,可以获得外部文件

    1 继承两个接口并分别重写,BeanNameAware,ResourceLoaderAware这样就分别从容器总拿到了Bean和资源加载器。

    package org.sselab.service;

    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;

    import java.io.IOException;

    /**
    * Created by pinker on 2016/11/8.
    */
    @Service
    public class AwareService implements BeanNameAware, ResourceLoaderAware {
    private String name;
    private ResourceLoader loader;

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

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

    public void outputResult() {
    System.out.println("Bean的名称是:" + name);

    Resource resource =
    loader.getResource("classpath:test.txt");
    try {
    System.out.println(IOUtils.toString(resource.getInputStream()));
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    2 配置类
    package org.sselab.conf;

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

    /**
    * Created by pinker on 2016/11/8.
    */
    @Configuration
    @ComponentScan("org.sselab")
    public class AwareConfig {

    }
    3 运行主类
    package org.sselab;

    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    import org.sselab.conf.AwareConfig;
    import org.sselab.service.AwareService;

    /**
    * Created by pinker on 2016/11/8.
    */
    public class Application {

    public static void main(String[] args) {
    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AwareConfig.class);

    AwareService service = context.getBean(AwareService.class);
    service.outputResult();
    context.close();
    }
    }

    分析一下,2是个配置类,肯定可以用SpringBootApplication来代替,这里我们伪造一个访问资源,看看能不能输出。
    public String getContext(){
    Resource resource =loader.getResource("classpath:test.txt");
    String result= null;
    try {
    result = IOUtils.toString(resource.getInputStream());
    } catch (IOException e) {
    e.printStackTrace();
    }
    return result;
    }
    然后构造访问的controller和主启动类OK了,完成了!
    实验结果如果所想,其实就是因为少了配置和采用了自动注入,所以没有本质的区别。
  • 相关阅读:
    测试开发趋势 + PyUnit测试框架 + Robot Framework
    python 面经
    持经达变,不固而中
    数据库、网络、Linux面经
    兴趣培养方向
    133天
    Python学习第132天(Django2内容增加)
    Python学习第131天(Django之ORM一对多操作练习)
    Python学习第130天(Django中ORM一对多的增删改查)
    Python学习第129天(ORM单表查询、模糊查询)
  • 原文地址:https://www.cnblogs.com/xd03122049/p/6045232.html
Copyright © 2020-2023  润新知