Spring应用程序中的非托管对象(最佳实践)

时间:2016-01-16 18:50:14

标签: java spring oop

我最近一直在研究一些Web应用程序和REST Web服务(Spring IoC / MVC / Data JPA等)。它们通常遵循相同的模式:控制器类 - >服务类(具有多个“实用程序”/业务逻辑类自动装配) - > Spring Data Repositories。

上面几乎所有类都是Spring单身。我觉得这会使代码和类中的一些函数变得更脏;例如,我不能在类中有一个状态,我需要在方法之间传递很多参数,而且我真的不喜欢有超过1-2个参数(虽然我知道有时候这是必要的)。

我想知道如何在大型(例如企业)应用程序中克服这个问题。

  • 在Spring应用程序中使用非Spring托管类是否常见?如果是这样,你如何将依赖项传递给它(那些通常是自动装配的)?例如,如果我使用构造函数注入,那么我需要将所有必需的依赖项自动装配到创建对象的类中,我想避免这种情况。另外,我真的不想弄乱加载时间编织等来将bean自动装入非Spring对象。
  • 使用原型范围豆是一个很好的解决方案吗?唯一的问题是我需要使用AOP的作用域代理(或方法注入等)来确保我首先为任何自动装入单例的bean获取一个新实例。这是一个“干净”和可靠的选择(即,是否确定不存在并发类型的问题)?我是否仍然可以将任何单身人士自动装入那些没有问题的班级?

是否有人在大型系统上工作(实际上设法保持结构不“膨胀”和干净)有任何建议吗?也许有一些我不知道并可以使用的模式?

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

Spring设计得很好,你不必担心DI的IoC实现。你提到的模式/控制器层 - >服务层 - >数据访问层/在实践中很好,并且由于OOP的规则,这些单例对象没有状态是可以的:“将对象视为服务提供者,做好一件事”。模型可以将状态作为JPA单元用于在数据库中存储内容。在大型系统中,如果您提到传递大量参数,您将不会强制使用脏代码,这只取决于您需要更深层构造的设计决策。