前言
對於應用程序來說,應該盡量減少對spring api的耦合程度,然后有時候為了運用spring提供的一些功能,有必要讓bean了解spring容器對其管理的細節信息,如讓bean知道在容器中是以哪個名稱被管理的,或者讓bean知道beanFactory或這applicationcontext的存在,也就是讓該bean可以獲取到beanfactory或applicationcontext的實例。
1 BeanNameAware接口
如果某個bean需要訪問配置文件中本身bean的id屬性,這個bean類通過實現BeanNameAware接口,在依賴關系確定之后,初始化方法之前,提供回調自身的能力,從而獲得本身bean的id屬性,該接口提供了 void setBeanName(String name)方法,需要指出的時該方法的name參數就是該bean的id屬性。回調該setBeanName方法可以讓bean獲取自身的id屬性
2.BeanFactoryAware接口
實現了BeanFactoryAware接口的bean,可以直接通過beanfactory來訪問spring的容器,當該bean被容器創建之后,會有一個相應的beanfactory的實例引用。該 接口有一個方法void setBeanFactory(BeanFactory beanFactory)方法通過這個方法的參數創建它的BeanFactory實例,實現了BeanFactoryAware接口,就可以讓Bean擁有訪問Spring容器的能力。
3 ApplicationContextAware接口
在Bean類被初始化后,將會被注入applicationContext實例,該接口有一個方法,setApplicationContext(ApplicationContext context),使用其參數context用來創建它的applicationContext實例