实现 BeanFactoryAware接口的 bean 可以直接访问 Spring 容器,被容器创建以后,它会拥有一个指向 Spring 容器的引用。
public class ServiceLocators implements BeanFactoryAware {
/**
* 现 BeanFactoηAware 接口的 bean 可以直接访问 Spring 容器,
* 被容器创建以后,它会拥有一个指向 Spring 容器的引用。 BeanFactoryAware 接口只有一个方法:
* void setBeanFactory(BeanFactory beanFactory)。
*/
private static BeanFactory beanFactory = null;
private static ServiceLocators serviceLocator = null;
@SuppressWarnings("static-access")
public void setBeanFactory(BeanFactory beanFactory) throws BeansException { //继承BeanFactoryAware接口必须实现此方法
this.beanFactory = beanFactory;
}
public BeanFactory getBeanFactory() {
return beanFactory;
}
public static ServiceLocator getInstance() {
if (serviceLocator == null)
serviceLocator = (ServiceLocator) beanFactory
.getBean("serviceLocator");
return serviceLocator;
}
/*
* 根据提供的bean名称获得相应的类 beanName - bean名称
*/
public static Object getBean(String beanName) {
return beanFactory.getBean(beanName);
}
/*
* 根据提供的bean名称得到对应指定类型的服务类 beanName - bean名称 cla - 返回的bean类型,若类型不匹配,跑出异常
*/
@SuppressWarnings("unchecked")
public static Object getBean(String beanName, Class cla) {
return beanFactory.getBean(beanName, cla);
}