场景是这样的,springboot项目集成groovy。groovy生成的实例化对象,交给spring管理,并且添加URL映射,可以通过http访问。
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps: 问答会员年卡【8折】购 ,限时加赠IT实体书,即可 享受50次 有问必答服务,了解详情>>>https://t.csdnimg.cn/RW5m
我最近正在研究这个,突然发现了解决方法
1.使用动态注册bean,就是上面那部分代码,将类注册成bean
2.使用以下代码,将bean注册成controller
final RequestMappingHandlerMapping requestMappingHandlerMapping=applicationContext.getBean(RequestMappingHandlerMapping.class)
//注册Controller
Method method=RequestMappingHandlerMapping.class.
getSuperclass().getSuperclass().
getDeclaredMethod("detectHandlerMethods",Object.class)
//将private改为可使用
method.setAccessible(true)
method.invoke(requestMappingHandlerMapping,"forTest")// forTest 是注册的bean的名字
希望可以帮到你,动态注册bean
@Component
public class ApplicationContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
applicationContext=context;
}
/**
* 动态注入单例bean实例
* @param beanName bean名称
* @param singletonObject 单例bean实例
* @return 注入实例
*/
public static Object registerSingletonBean(String beanName,Object singletonObject){
//将applicationContext转换为ConfigurableApplicationContext
ConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext) applicationContext;
//获取BeanFactory
DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) configurableApplicationContext.getAutowireCapableBeanFactory();
//动态注册bean.
defaultListableBeanFactory.registerSingleton(beanName,singletonObject);
//获取动态注册的bean.
return configurableApplicationContext.getBean(beanName);
}
}