原理就是通过实现Spring的ApplicationContextAware,来获取ApplicationContext容器的引用,并在静态方法中封装。
@Component
public class ApplicationContextGetBeanHelper implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
public static Object getBean(String className) throws BeansException,IllegalArgumentException {
if(className==null || className.length()<=0) {
throw new IllegalArgumentException("className为空");
}
String beanName;
if(className.length() > 1) {
beanName = className.substring(0, 1).toLowerCase() + className.substring(1);
} else {
beanName = className.toLowerCase();
}
return applicationContext != null ? applicationContext.getBean(beanName) : null;
}
public static <T> T getBean(Class<T> beanClass) throws BeansException,IllegalArgumentException {
if(beanClass==null) {
throw new IllegalArgumentException("beanClass为空");
}
return applicationContext != null ? applicationContext.getBean(beanClass) : null;
}
}
2、在需要注入Bean的地方使用ApplicationContextGetBeanHelper去getBean即可
// 方式一:根据要注入的Bean的Class去获取Bean
TableMetaService tableMetaService1 = ApplicationContextGetBeanHelper.getBean(TableMetaService.class);
// 方式二:根据要注入的Bean的name去获取Bean
TableMetaService tableMetaService2 = (TableMetaService)ApplicationContextGetBeanHelper.getBean("tableMetaService");