欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

深入理解spring之Aware接口的相关实现

程序员文章站 2022-07-10 12:18:40
...

前面几篇文章简单的介绍了spring中bean注解以及怎么在spring实现bean自动注入对应的bean,未查看的同学可以点击查看:

 

了解spring容器的IOC(依赖注入)的同学应该知道,我们的所有的bean对于spring容器是无意识的,啥叫无意识呢,就是你完全可以把spring容器替换成其他的容器而不需要改变你的代码,并且bean之间也是没有耦合的,既然这样,那问题就来,假如现在我们需要对spring有意识,换句话说就是现在我们的业务可能需要用到spring底层的一些功能那么我们该怎么实现?这个其实优秀的spring框架早就帮我们想到了,那就是spring提供了一系列的xxxAware接口供我们自己来实现使用

 

首先我来看一张图如下:

 

深入理解spring之Aware接口的相关实现
            
    
    博客分类: javaspring springbean框架 

从这个图中我们可以看到spring给我们提供了多达12种Aware接口,这边我们主要演示一下BeanNameAware,ResourceLoaderAware,ApplicationContextAware,BeanFactoryAware的使用,其他的xxxAware感兴趣的同学可以自己下去试试

首先我们新建一个MyAware如下:

 

 

/**
* 定义一个继承了BeanNameAware,
*             ResourceLoaderAware,
*             ApplicationContextAware,
*             BeanFactoryAware
*            的bean
* @author zhangqh
* @date 2018年5月19日
*/

public class MyAware implements BeanNameAware,ResourceLoaderAware,ApplicationContextAware,BeanFactoryAware{
   private String beanName;
   private ResourceLoader loader;
   private ApplicationContext applicationContext;
   private BeanFactory beanFactory;
   // BeanFactoryAware中的方法
   public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
       this.beanFactory = beanFactory;
   }
   // ApplicationContextAware中的方法
   public void setApplicationContext(ApplicationContext applicationContext)
           throws BeansException
{
       this.applicationContext = applicationContext;
   }
   // ResourceLoaderAware中的方法
   public void setResourceLoader(ResourceLoader resourceLoader) {
       this.loader = resourceLoader;
   }
   public void printResult() throws IOException {
       System.out.println("BeanNameAware Bean的名称是:" + beanName);
       Resource resource = loader.getResource("classpath:test.txt");
       System.out.println("----------------------------------------" );
       System.out.print("ResourceLoaderAware ResourceLoader加载的内容是:");
       String line = null;
       BufferedReader reader = new BufferedReader(new InputStreamReader(
               resource.getInputStream()));
       while ((line = reader.readLine()) != null) {
           System.out.println(line);
       }
       reader.close();
       Environment environment = applicationContext.getEnvironment();
       System.out.println("----------------------------------------" );
       System.out.println("ApplicationContextAware 系统是:" + environment.getProperty("os.name"));
       boolean flow = beanFactory.isSingleton(beanName);
       System.out.println("----------------------------------------" );
       System.out.println("BeanFactoryAware bean【" + beanName+" 】是单例嘛:"+flow);
   }
   // BeanNameAware中的方法
   public void setBeanName(String name) {
       this.beanName = name;
   }
}

 

src\main\resources目录下边我们有一个test.txt文件内容是:

 

i'm test data

 

测试方法如下:

 

AnnotationConfigApplicationContext applicationContext2 = new AnnotationConfigApplicationContext(MainScanConfig.class);
MyAware myAware = (MyAware) applicationContext2.getBean("myAware");
myAware.printResult();

 

运行结果如下:

 

BeanNameAware Bean的名称是:myAware
----------------------------------------
ResourceLoaderAware ResourceLoader加载的内容是:i'm test data
----------------------------------------
ApplicationContextAware 系统是:Windows 7
----------------------------------------
BeanFactoryAware beanmyAware 】是单例嘛:true

 

从以上测试结果可以发现我们需要注入spring相关的服务已经成功的加入到了我们自定义的MyAware中了

 

好了,看了这么的我们稍微简单的总结下xxxAware接口

  • 都是Aware接口的子接口,即都继承了Aware接口 

  • 父接口Aware中没有定义任何方法

  • 接口内均定义了一个set方法,set参数就是我们需要获取的对象

 

 

 

以上是今天文章的所有内容,欢迎大家吐槽深入理解spring之Aware接口的相关实现
            
    
    博客分类: javaspring springbean框架 

 

深入理解spring之Aware接口的相关实现
            
    
    博客分类: javaspring springbean框架 

推荐阅读

深入理解spring之Aware接口的相关实现
            
    
    博客分类: javaspring springbean框架 

全网最全技术视频和电子书免费发放

更多优质文章请关注以下公众号查阅:

 

深入理解spring之Aware接口的相关实现
            
    
    博客分类: javaspring springbean框架