aware主要有以下感知接口,只要在程序里實(shí)現(xiàn)相關(guān)接口掏秩,就可以獲取該aware相關(guān)的信息
BeanNameAware,可以在Bean中得到它在IOC容器中的Bean的實(shí)例的名字荆姆。
BeanFactoryAware蒙幻,可以在Bean中得到Bean所在的IOC容器,從而直接在Bean中使用IOC容器的服務(wù)胆筒。
ApplicationContextAware邮破,可以在Bean中得到Bean所在的應(yīng)用上下文诈豌,從而直接在Bean中使用上下文的服務(wù)。
MessageSourceAware抒和,在Bean中可以得到消息源矫渔。
ApplicationEventPublisherAware,在bean中可以得到應(yīng)用上下文的事件發(fā)布器摧莽,從而可以在Bean中發(fā)布應(yīng)用上下文的事件庙洼。
ResourceLoaderAware,在Bean中可以得到ResourceLoader镊辕,從而在bean中使用ResourceLoader加載外部對(duì)應(yīng)的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());
}
結(jié)果:
=========:beanNameAwareTest
=========:beanName
BeanFactoryAware:可以在Bean中得到Bean所在的IOC容器石咬,從而直接在Bean中使用IOC容器的服務(wù)。
@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工廠進(jìn)行bean操作:
@Autowired
private BeanFactoryAwareTest beanFactoryAwareTest;
public void aware() {
System.out.println("獲取相應(yīng)的bean:"+beanFactoryAwareTest.getBeanFactory().getBean("beanFactoryAwareTest"));
}
結(jié)果:
獲取相應(yīng)的bean:com.xebest.util.aware.BeanFactoryAwareTest@3c20f83d
其他的aware用同樣的方式重寫set方法卖哎,然后在添加get獲取到對(duì)象鬼悠,實(shí)現(xiàn)相關(guān)操作