spring容器中的bean对spring容器的存在是没有意识的,甚至我们可以自由切换容器。当我们需要调用
spring容器的资源的时候就需要让bean感知到spring容器的存在,因此spring为我们提供了aware接口。
常用的几个aware接口:
* BeanNameAware 获得容器中bean的名称
* BeanFactoryAware获得当前的beanfactory这样可以调用容器的服务
* MessageSourceAware 获得message source 这样可以获得文本信息
* ApplicationEventPublisherAware 应用事件发布器,可以发布事件
* ResourceLoaderAware获得资源加载器,可以获得外部资源文件
下面编写一个demo实现aware接口,这里我们把test.txt放在resource文件夹下面
@Service
public class DemoBean implements BeanNameAware,ResourceLoaderAware {
private String beanName;
private ResourceLoader loader;
/**
*
* @param resourceLoader
* @OVerride标签用于重写父类方法
*/
@Override
public void setResourceLoader(ResourceLoader resourceLoader){
this.loader = resourceLoader;
}
@Override
public void setBeanName(String name){
this.beanName = name;
}
/**
* ctr+alt+t 引入try catch快捷方式
*/
public void outputResult(){
System.out.println("Bean的名称为:"+beanName);
//Resource resouce = loader.getResource("classpath:com/example/demo/test.txt");
Resource resouce = loader.getResource("test.txt");
try {
System.out.println("ResourceLoader加载的内容为:"+ IOUtils.toString(resouce.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
}
}
配置类就不细说了,直接上代码
/**
* Created by lengshan on 2018/3/22 0022. */@Component@ComponentScan("com.example.demo")public class Myconfig {}Main函数编写
@SpringBootApplication
public class DemoSpringawareApplication {
public static void main(String[] args) {
SpringApplication.run(DemoSpringawareApplication.class, args);
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Myconfig.class);
DemoBean demo = context.getBean(DemoBean.class);
demo.outputResult();
context.close();
}
}
运行结果是
参考:《Java EE开发的颠覆者 spring boot实战》