SpringIOC容器初始化源码解析(2)—— Aware及其子接口

本文阅读 2 分钟
首页 代码,Java 正文
public interface Aware { }

仅仅是个空的接口,只能当做标签来使用,真正能发挥作用的是继承了这个接口的子接口。

img 当类需要容器提供帮助的时候,就需要向容器证明类本身是可以感知到容器的存在的,即实现特定类型的aware接口。

public interface ApplicationContextAware extends Aware { 

   void setApplicationContext(ApplicationContext applicationContext) throws BeansException;
}

实现了该接口的bean,在容器创建这个bean实例的时候,将容器本身的实例作为参数传进来给这个bean使用

package org.springframework.beans.factory;

public interface BeanNameAware extends Aware { 
   void setBeanName(String name);
}

方法的作用是将bean的名字传进来供接口实现类使用。

  • BeanFactoryAware主要是用于获取当前的BeanFactory,这样就可以调用容器服务
  • MessageSourceAware是用来获取MessageSource相关的文本信息
  • ApplicationEventPublisherAware是用来获取发布器实例以发布事件
  • ResourceLoaderAware主要是用来获取资源加载器的,通过资源加载器可以获取外部资源加载文件
  • 每一个Aware都会有一个对应的set

可以修改WelcomeController来进行一个测试:

点击获取源码

package com.wjw.controller;

import com.wjw.service.WelcomeService;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanInitializationException;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Controller;

@Controller
public class WelcomeController implements ApplicationContextAware, BeanNameAware { 
   private String myName;
   private ApplicationContext myContainer;

   @Autowired
   private WelcomeService welcomeService;

   public void handleRequest(){ 
      welcomeService.sayHello("来自Controller的问候");
      System.out.println("I am:" + myName);
      String[] beanDefinitionNames = myContainer.getBeanDefinitionNames();
      for(String beanDefinitionName : beanDefinitionNames) { 
         System.out.println("I get:" + beanDefinitionName);
      }
   }

   @Override
   public void setBeanName(String name) { 
      this.myName = name;
   }

   @Override
   public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 
      this.myContainer = applicationContext;
   }
}

img

注意:想要获取容器提供的支援,除了实现aware接口之外,本身还必须是被容器管理的bean才行。

本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://wangjiawei.blog.csdn.net/article/details/121070017
-- 展开阅读全文 --
安全面试之XSS(跨站脚本攻击)
« 上一篇 07-24

发表评论

成为第一个评论的人

热门文章

标签TAG

最近回复