春天 - 教程与现实生活

时间:2016-02-02 13:09:43

标签: java spring hibernate spring-mvc

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

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

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

所示

Spring diagram - Tutorial vs Real life

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

从我见过的所有例子中,我都提出了这些替代方案:

  1. 创建自动装配到 ALL 控制器内部的DbManager,然后IoC到所有业务类,直到它到达业务逻辑类 n 。这将遵循Spring标准,但意味着最多的代码重构
  2. 所有业务逻辑类转换为 beans
  3. SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this); 添加到业务逻辑类 n 并使用@Autowire访问DbManager
  4. 我错过了什么或者还有其他选择吗?

2 个答案:

答案 0 :(得分:1)

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

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

我相信业务对象不需要互相创建。让春天去做吧。他完美地做到了。

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

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

答案 1 :(得分:0)

你可以(并且应该!)使用Spring Stereotypes

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