我们应该明白,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();
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐