我是Spring的新手,我希望将我现有的应用程序转换为Spring。
但是,我使用的是一个自写模块框架,它允许我在运行时动态地添加或删除应用程序的组件或附加功能。整个过程可以与插件框架(如PF4J )或我的服务器中的插件机制进行比较。
这样做的好处显而易见。应用程序更加动态,程序的某些部分可以在运行时进行更新,而无需重新启动整个应用程序。
在遮罩下,在加载每个模块时为其创建一个新的ClassLoader。此ClassPath的ClassLoader包含模块的JAR文件。之后,我用这个ClassLoader加载相应的类,并在那里执行一个init方法,其中包含每个模块。
现在,我当然希望与Spring有关的是,模块中的依赖项注入和bean(例如,在模块中的rest控制器)都向模块加载注册,并与模块卸载一起注销寄存器。
例句:我有一个员工单元。当我注册它时,employee端点就会被注册并且是功能性的。卸载模块时,将再次删除employee端点。
现在我的问题是:
不幸的是,我不知道如何用Spring来实现它,或者在Spring中这样的事情甚至是可能的。或者已经有其他解决方案了吗?
我还阅读了一些关于应用程序上下文的内容。是否必须为每个模块创建一个新的应用程序上下文,然后在卸载模块时以某种方式“关闭”该应用程序上下文?
我希望你能帮我,也有代码示例。
发布于 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上的其他问题。
https://stackoverflow.com/questions/72509830
复制相似问题