• 12点睛Spring4.1-Spring Aware


    12.1 Aware

    • 我们设计的准则是解耦,这就意味着我们不能对Spring的IoC容器有直接的依赖,但是我们还是想我们的bean能识别容器的资源;
    • 使用aware能让我们在应用的任意位置获得spring容器的资源;
    • 我们通过实现aware接口来识别spring容器的资源;
    • Spring包含的aware有:
      • BeanNameAware
      • BeanFactoryAware
      • ApplicationContextAware
      • MessageSourceAware
      • ApplicationEventPublisherAware
      • ResourceLoaderAware
    • 实现ApplicationContextAware接口,可识别所有的资源,但最好是你用到什么就使用什么;
    • 这也就意味着我们就耦合到了spring框架上了,没有spring框架你的代码将无法执行;

    12.2 示例

    12.2.1 新建演示bean

    package com.wisely.aware;
    
    import org.springframework.beans.factory.BeanNameAware;
    import org.springframework.context.ResourceLoaderAware;
    import org.springframework.core.io.ResourceLoader;
    import org.springframework.stereotype.Component;
    @Component
    public class DemoBean implements BeanNameAware,ResourceLoaderAware{
        private String name;
        private ResourceLoader loader;
    
        //BeanNameAware接口的方法
        public void setBeanName(String beanName) {
            this.name = beanName;
    
        }
    
        //ResourceLoaderAware接口的的方法
        public void setResourceLoader(ResourceLoader resourceLoader) {
            this.loader = resourceLoader;
    
        }
    
        public String getName() {
            return name;
        }
    
    
        public ResourceLoader getLoader() {
            return loader;
        }
    
    }
    

    12.2.2 新建演示用文件info.txt

    jhkljhlkjhlkj
    111111111111

    12.2.3 测试

    package com.wisely.aware;
    
    import java.io.IOException;
    
    import org.apache.commons.io.IOUtils;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    import org.springframework.core.io.Resource;
    import org.springframework.core.io.ResourceLoader;
    
    public class Main {
    
        public static void main(String[] args) throws IOException {
            AnnotationConfigApplicationContext context =
                    new AnnotationConfigApplicationContext("com.wisely.aware");
            DemoBean db = context.getBean(DemoBean.class);
            System.out.println(db.getName());
            ResourceLoader rl = db.getLoader();
            Resource r = rl.getResource("classpath:com/wisely/aware/info.txt");
            System.out.println(IOUtils.toString(r.getInputStream()));
            context.close();
        }
    
    }
    

    输出结果

    demoBean
    jhkljhlkjhlkj
    111111111111
  • 相关阅读:
    IOS控件Label(UILabel)
    利用 sys.sysprocesses 检查 Sql Server的阻塞和死锁
    PowerShell 定时执行.Net(C#)程序
    Sql Server 2012 转换函数的比较(Cast、Convert 和 Parse)
    Sql Server 编译、重编译与执行计划重用原理
    Windows Server 2008 R2 下安装 Sql Server 2012 初体验
    Sql Server 批量导出索引、存储过程、视图和函数
    IOS UIImage
    C# 分析 IIS 日志(Log)
    Sql Server 2012 分页方法分析(offset and fetch)
  • 原文地址:https://www.cnblogs.com/Jeely/p/11949920.html
Copyright © 2020-2023  润新知