Spring提供的Aware接口:
BeanNameAware:获得到容器中Bean的名称
BeanFactoryAware:获得当前bean factory,这样可以调用容器的服务
ApplicationContextAware:当前的application context,这样可以调用容器的服务
MessageSourceAware:获得message source,这样可以获得广西信息
ApplicationEventPublisherAware:应用事件发布器,可以发布事件,2.5节的DemoPubliser也可实现这个接口来发布事件
ResourceLoaderAware:获得资源加载器可以获得外部资源文件
因为ApplicationContext接口集成了MessageSource接口、ApplicationEventPublisher接口和ResourceLoader接口,
所以Bean继承ApplicationContextAware可以获得Spring容器的所有服务,但原则上我们还是用到什么接口,就实现什么接口
Bean:
@Component
public class MyAware implements BeanNameAware,ResourceLoaderAware{
//用于获取当前类的名称
private String beanName;
//用于获取指定文件的内容
private ResourceLoader loader;
public void setResourceLoader(ResourceLoader resourceLoader) {
this.loader = resourceLoader;
}
public void setBeanName(String name) {
this.beanName = name;
}
//控制台打印
public void printResult() {
System.out.println("beanName:"+beanName);//当前类的名称
Resource resource = loader.getResource("classpath:com/demo02/aware/test.txt");
try {
InputStream stream = resource.getInputStream();
System.out.println("文件:"+IOUtils.toString(stream));//指定文件的内容
} catch (IOException e) {
e.printStackTrace();
}
}
}
配置类:
@Configuration
@ComponentScan("com.demo02.aware")
public class AwareConfig {
}
测试运行:
public class App {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AwareConfig.class);
MyAware aware = context.getBean(MyAware.class);
aware.printResult();
context.close();
}
}