在ioc下应该有什么样的对象

时间:2013-12-16 20:42:36

标签: java spring spring-mvc inversion-of-control

我正在使用Spring和Spring MVC构建一个Web应用程序,我希望尽可能使用干净的设计。我研究过依赖注入和反演控制,但我还是没有完全理解它。几乎总是避免创建新对象并注入它们是一种好习惯吗?我知道服务和DAO对象很好注入,但在什么情况下应该只创建一个新实例?

3 个答案:

答案 0 :(得分:4)

我个人不会用Spring管理的对象的一些示例:

  • Domain objects - 通常它们是短暂的对象,其生命周期由Hibernate等持久性框架管理,并且不依赖于Service / DAO对象
  • Value objectsData transfer objects
  • 我想用自己的工厂创建的对象 - 我更喜欢在工厂中创建哪种类型对象的逻辑。 Spring可以管理工厂本身。
  • 为类或应用程序层内部使用而创建的任何内容

一般情况下,我不会在以下情况下使用Spring来管理对象:

  • 该对象不依赖于Spring管理的其他bean
  • Spring不会帮我测试这个对象
  • 它不需要Spring管理的任何资源,例如数据源,事务,调度程序等。
  • 我不需要Spring用其他行为来装饰它
  • 当它严重损害我的代码的可读性时
  • 它是一个短暂的对象,包含状态而没有逻辑

答案 1 :(得分:2)

我猜没有正确答案。恕我直言,春天豆子的好候选人的重要迹象是

  • 几乎与应用程序(或范围)一样长,
  • 需要安全,交易管理等理想情况下由AOP处理的事项
  • 是一个单身人士(更好的说:每个范围只有一个实例)
  • 实例化后不会更改

控制器,服务和存储库,例如分享这些特点。

答案 2 :(得分:1)

一个不错的经验法则是,如果一个对象是多个其他对象的依赖关系,那么将它设置为bean可能是明智的,这样Spring就可以在适当的实例中连接。

那就是说,Spring赞成 singleton bean,老实说这看起来像过去的遗物,因为获取单例的锁定可能比仅需要创建一个新实例要昂贵得多。因此,除非它具有实际需要在该对象的用法之间保持的状态,否则我不会使任何bean单例作用域。