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了,完成了!
    实验结果如果所想,其实就是因为少了配置和采用了自动注入,所以没有本质的区别。
  • 相关阅读:
    linux系统常用命令
    oracle resetlog与noresetlog的作用(转载)
    RMAN备份之非归档模式下的备份
    查看oracle锁及解决办法
    夫夷以近,则游者众,险以远,则至者少!
    (转)一个10年程序员职业发展、总结和困境
    在myeclipse中写sql语句的细节问题
    myeclipse查询mysql出来的汉字是乱码
    如何将DB2的数据库转换到mySQL中?
    笔记本建立wifi热点的实用详细步骤
  • 原文地址:https://www.cnblogs.com/xd03122049/p/6045232.html
Copyright © 2011-2022 走看看