public interface Aware { }
仅仅是个空的接口,只能当做标签来使用,真正能发挥作用的是继承了这个接口的子接口。
当类需要容器提供帮助的时候,就需要向容器证明类本身是可以感知到容器的存在的,即实现特定类型的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;
}
}
注意:想要获取容器提供的支援,除了实现aware接口之外,本身还必须是被容器管理的bean才行。
本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://wangjiawei.blog.csdn.net/article/details/121070017