@Autowired
private IUserService userService;
private IUserService userService = AppContextUtils.getBean(IUserService.class);
简单配置类
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component
public class AppContextUtils implements ApplicationContextAware, BeanDefinitionRegistryPostProcessor {
private static ApplicationContext appCtx;
private static BeanDefinitionRegistry beanDefinitionRegistry;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
appCtx = applicationContext;
}
public static ApplicationContext getApplicationContext(){
return appCtx;
}
public static Object getBean( String beanName ) {
return appCtx.getBean( beanName );
}
public static <T> T getBean(Class<T> cls){
return appCtx.getBean(cls);
}
public static <T> T getBean(String beanName, Class<T> cls){
return appCtx.getBean(beanName, cls);
}
public static String getEnvProp(String key){
return appCtx.getEnvironment().getProperty(key);
}
public static void unRegisterBean(String beanName){
if(appCtx.containsBean(beanName)) {
beanDefinitionRegistry.removeBeanDefinition(beanName);
}
}
public static <T> T registerBean(String name, Class<T> clazz, Object... args) {
if(appCtx.containsBean(name)) {
Object bean = appCtx.getBean(name);
if (bean.getClass().isAssignableFrom(clazz)) {
return (T) bean;
} else {
throw new RuntimeException("BeanName 重复 " + name);
}
}
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz);
for (Object arg : args) {
beanDefinitionBuilder.addConstructorArgValue(arg);
}
BeanDefinition beanDefinition = beanDefinitionBuilder.getRawBeanDefinition();
beanDefinitionRegistry.registerBeanDefinition(name, beanDefinition);
return appCtx.getBean(name, clazz);
}
public static <T> Map<String, T> getBeansOfType(Class<T> cls){
return appCtx.getBeansOfType(cls);
}
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException {
AppContextUtils.beanDefinitionRegistry = beanDefinitionRegistry;
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下