zoukankan      html  css  js  c++  java
  • 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了,完成了!
    实验结果如果所想,其实就是因为少了配置和采用了自动注入,所以没有本质的区别。
  • 相关阅读:
    织梦后台如何生成站点地图sitemap.xml
    滚轮滚动一定距离触发导航顶部固定,且所点击的关键词,背景字体变色
    超简单横向选项卡
    后台域名重定向301
    JS检测是否是360浏览器
    《深入理解Java虚拟机》-----第2章 Java内存区域与内存溢出异常
    java基础(十七)----- 浅谈Java中的深拷贝和浅拷贝 —— 面试必问
    java基础(十六)----- equals()与hashCode()方法详解 —— 面试必问
    java基础(十五)----- Java 最全异常详解 ——Java高级开发必须懂的
    java基础(十四)-----详解匿名内部类——Java高级开发必须懂的
  • 原文地址:https://www.cnblogs.com/xd03122049/p/6045232.html
Copyright © 2011-2022 走看看