首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring: bean、rest控制器等的动态注册

Spring: bean、rest控制器等的动态注册
EN

Stack Overflow用户
提问于 2022-06-05 17:54:36
回答 1查看 151关注 0票数 0

我是Spring的新手,我希望将我现有的应用程序转换为Spring。

但是,我使用的是一个自写模块框架,它允许我在运行时动态地添加或删除应用程序的组件或附加功能。整个过程可以与插件框架(如PF4J )或我的服务器中的插件机制进行比较。

这样做的好处显而易见。应用程序更加动态,程序的某些部分可以在运行时进行更新,而无需重新启动整个应用程序。

在遮罩下,在加载每个模块时为其创建一个新的ClassLoader。此ClassPath的ClassLoader包含模块的JAR文件。之后,我用这个ClassLoader加载相应的类,并在那里执行一个init方法,其中包含每个模块。

现在,我当然希望与Spring有关的是,模块中的依赖项注入和bean(例如,在模块中的rest控制器)都向模块加载注册,并与模块卸载一起注销寄存器。

例句:我有一个员工单元。当我注册它时,employee端点就会被注册并且是功能性的。卸载模块时,将再次删除employee端点。

现在我的问题是:

不幸的是,我不知道如何用Spring来实现它,或者在Spring中这样的事情甚至是可能的。或者已经有其他解决方案了吗?

我还阅读了一些关于应用程序上下文的内容。是否必须为每个模块创建一个新的应用程序上下文,然后在卸载模块时以某种方式“关闭”该应用程序上下文?

我希望你能帮我,也有代码示例。

EN

回答 1

Stack Overflow用户

发布于 2022-07-03 16:49:51

这篇文章对我有点帮助:https://hdpe.me/post/modular-architecture-with-spring-boot/

简而言之,为每个模块创建了一个新的ApplicationContext (例如AnnotationConfigApplicationContext)。如果要在模块之间共享bean,则必须将它们发布到主应用程序上下文中。

((GenericApplicationContext) applicationContext).registerBeanDefinition(name, beanDefinition);可以在运行时在主应用程序上下文中注册Beans。

另一个问题是需要额外的配置,例如对于@RestController或类似的配置,以便它们能够工作。请看我在StackOverFlow上的其他问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72509830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档