如何用spring运行时做IoC?

现在的Spring做IoC,说是运行时做的,其实并不能在运行时做修改,除非显式调用getBean方法。

比如我有一个接口IA。有两个实现类CA1和CA2。现在我在某处需要注入IA x;spring的做法都需要静态指定这个x会配到哪个实现类,是CA1还是CA2,这种指定可能是显式的,可能是基于某种规则的,但都是静态配置的。

如果我希望基于某个运行时的参数,比如每次前台请求传过来的一个参数p,动态决定是将CA1实例化注入x,还是将CA2实例化注入x,就得显式地getBean。

出于洁癖,我觉得这么做太不干净了……

有可能达成上述需求吗?

恐怕很难。

从设计有一个建议:你将这些需要根据参数动态加载的“服务“类不要看成是服务,而是MVC的ACTION,在MVC表现层通过Struts之类配置文件根据客户端的参数动态加载这些Action,然后再在Action中调用后端服务。