在我正在处理的应用程序中,每个类都由Spring容器管理,每个类都有一个单独的界面。
这些bean中有95%只有一个实现。所以几乎每个类都是重复的 - 一个接口和一个实现。
大部分时间这是由于传递性管理:
A1类使用A2类使用A3类......一直到A6。管理A1和A6。
为了让A5获得A6的实例,必须对其进行管理。
所以我们也做了A5管理。对A4,A3和A2重复这个过程,你会得到4个真正不需要管理的类,但它们是因为下面有一个托管bean。
可以保持A2..A5不被管理,并且在A5中使用应用程序上下文来获取A6的实例,但Spring文档强烈反对它。
我的问题是,Spring DI是一种全有或全无的方法,还是有一种混合托管和非托管代码的好方法?
为什么使用应用程序上下文获取bean这么糟糕?
是否有一种很好的方法来对使用非托管代码的托管代码进行单元测试?