【发布时间】:2019-12-31 23:00:33
【问题描述】:
我正在学习这门关于 Spring Hibernate 等的 udemy 课程。该课程首先解释了控制注入和依赖注入如何在 Web 视角下工作,就像拥有简单的类或 bean、在配置中定义 bean 及其依赖项一样xml 文件或在实际类中使用 java 注释,然后在其中创建 bean 的主类。我明白,尽管除了分离角色(如创建和维护对象以及添加对象所需的依赖项)之外,并没有真正看到使用 IoC 和 DI 的巨大好处,我猜当项目更大时,这会使它更清晰、更容易遵循,对吧?
但是,我不明白 IOC 和 DI 在一个完整的 Spring MVC 项目中是如何联系在一起的。就像我理解的那样,使用 @Controller 注释意味着它就像一个 @Component 并且您可以让它在创建 bean 时自动扫描组件,但与以前不同的是,没有创建和配置 bean 的主类,而是我有一个控制器类我手动创建对象和模型并将其传递回可以使用模型中的值的视图。我没有看到我在这里如何使用 IoC 或 DI?或者是因为它是一个简单的项目,也许我们创建的对象没有很多依赖关系?还是很多使用和实现是内部完成的还是自动完成的?
我只是在努力 a) 了解为什么 IoC 和 DI 如此重要,以及 b) 在没有创建 bean 的主类的 Spring MVC 项目中,它们是如何实际使用的。
【问题讨论】:
-
您似乎对 DI 的概念有基本的了解,但对 MVC 作为一种设计模式却没有;我建议查一下。请注意,设计良好的应用程序中的大多数控制器都需要注入 1-3 个依赖项(实际实现业务逻辑的服务;控制器本身只是 HTTP 和 Java API 之间的转换层)。
-
我认为我的主要困惑来源是我首先将 IoC 和 DI 作为与 Spring MVC 无关的概念来学习,其中我在一个简单的 java 应用程序的 main 方法中手动创建 bean,而在 Spring MVC例如,spring框架将自动创建控制器类的bean并注入其依赖项,即正如您提到的业务逻辑所需的服务。所以我很困惑为什么我没有像最初在main中那样手动初始化或创建bean ,这是因为在 Spring MVC 中会为我初始化它们,我使用组件扫描对吗?
-
是的,或者
@Bean类中的@Configuration方法。容器的全部工作就是找到依赖图并为你创建 bean。
标签: java spring spring-mvc dependency-injection inversion-of-control