Spring实现Aware接口,完成对IOC容器的感知
2017-09-20 本文已影响9人
java面试收割机
aware主要有以下感知接口,只要在程序里实现相关接口,就可以获取该aware相关的信息
BeanNameAware,可以在Bean中得到它在IOC容器中的Bean的实例的名字。
BeanFactoryAware,可以在Bean中得到Bean所在的IOC容器,从而直接在Bean中使用IOC容器的服务。
ApplicationContextAware,可以在Bean中得到Bean所在的应用上下文,从而直接在Bean中使用上下文的服务。
MessageSourceAware,在Bean中可以得到消息源。
ApplicationEventPublisherAware,在bean中可以得到应用上下文的事件发布器,从而可以在Bean中发布应用上下文的事件。
ResourceLoaderAware,在Bean中可以得到ResourceLoader,从而在bean中使用ResourceLoader加载外部对应的Resource资源。
1、BeanNameAware:获取bean的名称,如:
@Service
public class BeanNameAwareTest implements BeanNameAware {
private String name;
@Override
public void setBeanName(String name) {
this.name = name;
}
public String getBeanName() {
return this.name;
}
}
获取bean:
@Autowired
private BeanNameAwareTest beanNameAwareTest;
public void aware() {
System.out.println( "=========:"+beanNameAwareTest.getBeanName());
beanNameAwareTest.setBeanName("beanName");
System.out.println( "====================:"+beanNameAwareTest.getBeanName());
}
结果:
=========:beanNameAwareTest
=========:beanName
BeanFactoryAware:可以在Bean中得到Bean所在的IOC容器,从而直接在Bean中使用IOC容器的服务。
@Service
public class BeanFactoryAwareTest implements BeanFactoryAware {
private BeanFactory beanFactory;
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.beanFactory = beanFactory;
}
public BeanFactory getBeanFactory() {
return this.beanFactory ;
}
}
获取bean工厂进行bean操作:
@Autowired
private BeanFactoryAwareTest beanFactoryAwareTest;
public void aware() {
System.out.println("获取相应的bean:"+beanFactoryAwareTest.getBeanFactory().getBean("beanFactoryAwareTest"));
}
结果:
获取相应的bean:com.xebest.util.aware.BeanFactoryAwareTest@3c20f83d
其他的aware用同样的方式重写set方法,然后在添加get获取到对象,实现相关操作