在由多个子类扩展的超类中自动装配Spring bean

时间:2012-02-13 21:04:20

标签: java spring autowired

将一大堆@Autowired bean放在超类中是否有任何缺点,这些bean在该类中没有使用,而是在扩展超类的子类中使用?

3 个答案:

答案 0 :(得分:5)

不,没有缺点。

请确保您不使用自动装配的构造函数,因为它很快就会成为支持它们的痛苦。

答案 1 :(得分:3)

你的代码看起来很难看,春季启动可能需要几毫秒的时间,当然这些字段需要更多的内存(Java需要的字段)。但除此之外,我不会指望任何问题。

对于“正常”运行时,应该没有影响(内存除外)

我认为可以说10到30个字段可以说最多10个bean。如果你有TON字段,那么测试并测量内存和性能影响。

答案 2 :(得分:0)

一如既往,这取决于。如果你所有的bean都是单例范围的,那应该不是什么大问题,这就是“官方派对”。

如果您的bean是请求作用域(例如控制器类),那么您可能遇到的问题比您所知道的要大得多。也许其中一些依赖也不是单身人士?您可以轻松地为请求范围控制器类的每个实例化构建500个bean,因为您正在构建依赖关系及其依赖关系等等。

现在由于春季冰川的实例化速度很慢,你确实遇到了问题。春天框架的官方派对似乎是要忽略这个问题,因为我相信@Bozho会在这个回复的评论中强烈捍卫。所有这一切显然是因为“web范围”在2.0版本的现有设计中是复制的,并且由于支持的大量用例,这完全是在现有实现的基础上完成的。

当然,解决方案是规范您的依赖关系;不要把它们全部放在基类中。如果你很懒,你可以在ApplicationContext中连接并在需要时为每个服务使用显式调用getBean。当然,这完全违背了弹簧的任何设计指南。