一、工具類
public class SpringCtxUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
private static DefaultListableBeanFactory defaultListableBeanFactory;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
AnycloudApplication.applicationContext = applicationContext;
defaultListableBeanFactory = (DefaultListableBeanFactory)applicationContext.getAutowireCapableBeanFactory();
}
public static <T> T getBean(Class<T> clazz) {
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz);
String className = clazz.getName();
defaultListableBeanFactory.registerBeanDefinition(className, beanDefinitionBuilder.getBeanDefinition());
return (T) applicationContext.getBean(className);
}
public static void destroy(String className){
defaultListableBeanFactory.removeBeanDefinition(className);
System.out.println("destroy " + className);
}
}
二、使用工具類注入類
UserService userService= SpringCtxUtil.getBean(UserService.class);
三、注意
在我們需要調用的類前加上註解@Primary
@Primary
public Class UserService {
}
如果我們在需要注入的類中使用了@Transactional註解,一般會導致注入失敗,請參考下面的博文
https://blog.csdn.net/weixin_36524613/article/details/85258442