我希望有可能在运行时交换spring bean。我使用HotSwappableTargetSource找到了解决方案,但我对此解决方案不满意。当项目具有100-200个可以进行热交换的bean时,我将不得不使用Proxy实现相同的HotSwappableTargetSources。我正在寻找更通用的解决方案。
答案 0 :(得分:0)
热交换有两种。
如果您调试类并希望立即更改代码,而无需对应用程序的生命周期进行进一步操作。对于Spring-Bean(aka CDI-Bean),这是不可能的。一种解决方法是使用这样的Spring-Bean:
@Component
public class MyComponent {
private HotSwappable other = new HotSwappable();
@Transactional
public void notHotSwappable(){
other.hotSwappableMethod();
}
}
和HotSwappable
类类似
public class HotSwappable {
public void hotSwappableMethod(){
System.out.println("This output can be changed in runtime by debugger if connected.");
}
}
您可以更改hotSwappableMethod
的内容。
您可以实现HotSwappableTargetSource以便在运行时切换实现。
更通用的解决方案是使用Composite Pattern。
(...)代表部分整体层次结构(...)