springboot给new 出来的controller添加映射

场景是这样的,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);
    }
}