【问题标题】:Spring - Tutorials vs Real LifeSpring - 教程与现实生活
【发布时间】:2016-02-02 13:09:42
【问题描述】:

我目前正在将 Spring 和 Hibernate 添加到现有应用程序中,但在阅读了大量教程后,仍有一些 (也就是很多东西) 看起来很奇怪我或者我错过了什么......

我发现的所有教程都是直截了当的(就像大多数教程一样),如 示例 A 所示,一个控制器来处理请求(JSP 或 WS)并自动装配管理器类与数据库交互。

在我的情况下,这不适用,因为应用程序有一个类来处理请求,然后它实例化一个处理程序类,该类又创建一个新类来处理其他创建一个新类来处理 (. ...)* 然后处理数据库连接,如 示例 B 所示。

我的问题是如何使我的业务逻辑类 n “Springable”,即能够在其中自动装配数据库管理器?

根据我看到的所有示例,我提出了以下替代方案:

  1. 创建自动连接到 ALL 控制器内的 DbManager,然后将 IoC 连接到所有业务类,直到它到达业务逻辑类n。这将遵循 Spring 标准,但意味着最多的代码重构
  2. ALL业务逻辑类转换为bean
  3. SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this); 添加到业务逻辑类 n 并使用 @Autowire 访问 DbManager

是我遗漏了什么还是有其他选择?

【问题讨论】:

  • 在我看来,最好的(或正确的)方法将是替代方法 2. 将所有业务逻辑和数据访问类转换为 spring bean (@Service & Repository) 而不是创建代码中的实例,配置 spring 以在必要时注入这些 bean。您可能希望使用component-scan 标记,而不是冗长的 XML,让 spring 了解和管理这些 bean。

标签: java spring hibernate spring-mvc


【解决方案1】:

这只是我的意见,但您可能会感兴趣。

Spring 的基本理念,即涉及容器而非业务对象的对象的创建和配置这一事实被称为IoC 或依赖注入。基于配置,容器创建对象并将对象彼此关联(注入)。这允许您删除与实例化和配置相关的业务类的代码(此代码可能非常复杂)。因此,您的课程将变得更轻松、更清晰,并且可以专注于业务逻辑而不是其他任何事情。

我相信业务对象不需要相互创建。让春天去做。他做得很完美。

只需标记您的业务逻辑类,取决于它的角色,使用刻板印象之一:@Component@Service@Controller(刻板印象的含义您可以找到here),并用@Autowired 注入它.如果您在此类中需要数据库管理器,请以同样的方式注入。

所以,我的选择对应于第二点:“2. 将所有业务逻辑类转换为 bean...”

【讨论】:

    【解决方案2】:

    您可以(并且应该!)为此使用 Spring Stereotypes

    有关建议的应用程序结构的详细信息,请参阅my previous answer to a similar question

    【讨论】:

      猜你喜欢
      • 2012-06-06
      • 2012-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      相关资源
      最近更新 更多