# Spring 教程

> 原文： [https://howtodoinjava.com/java-spring-framework-tutorials/](https://howtodoinjava.com/java-spring-framework-tutorials/)

本页列出了所有 Spring 教程和 HowToDoInJava.com 上可用的示例。 每次都会更新此页面，我将在 Spring 框架上写任何文章。 随意建议您想阅读的主题。

![Spring tutorials](img/85bf44a9b4d267aa37013e855837852e.jpg)

## Spring 核心教程

*   [Spring bean 范围](https://howtodoinjava.com/spring/spring-core/spring-bean-scopes/)
    spring 容器中的 bean 可以在五个范围中创建。 单例，原型，请求，会话和全局会话。 详细了解它们。
*   [Spring bean 生命周期回调方法](https://howtodoinjava.com/spring/spring-core/spring-bean-life-cycle/)
    Spring 框架提供了以下 4 种方法来控制 Bean 的生命周期事件：
    1.  `InitializingBean`和`DisposableBean`回调接口
    2.  其他用于特定行为的感知接口
    3.  Bean 配置文件中的自定义`init()`和`destroy()`方法
    4.  `@PostConstruct`和`@PreDestroy`注解
*   [Spring bean 自动装配](https://howtodoinjava.com/2013/05/08/spring-beans-autowiring-concepts/)
    在 spring 框架中，遵循配置文件中设置 bean 的依赖关系是一个好的做法，但是 spring 容器也能够自动装配协作 bean 之间的关系。 这意味着可以通过检查`BeanFactory`的内容来自动让 Spring 为您的 bean 解决协作者（其他 bean）。 了解如何做。
*   [Bean `byType`自动装配](https://howtodoinjava.com/spring/spring-core/spring-bean-autowire-bytype/)
    如果容器中仅存在一个具有该属性类型的 Bean，则通过类型进行自动装配可以自动装配属性。 如果存在多个错误，则将引发致命异常，这表明您不能对该 bean 使用`byType`自动装配。 详细了解。
*   [Bean `byName`自动装配](https://howtodoinjava.com/spring/spring-core/spring-bean-autowire-byname/)
    通过名称自动装配允许自动装配属性，以便它将检查容器并查找与需要自动装配的属性名称完全相同的 bean。 了解更多。
*   [Bean 的构造函数自动装配](https://howtodoinjava.com/spring/spring-core/spring-autowiring-by-constructor/)
    构造函数的自动装配与`byType`相似，但适用于构造函数参数。 在启用自动装配的 bean 中，它将查找构造函数参数的类类型，然后按类型对所有构造函数参数进行自动装配。 学到更多。
*   [如何使用`FactoryBean`创建 bean](https://howtodoinjava.com/spring/spring-core/how-to-create-beans-using-spring-factorybean/)
    工厂 bean 是充当在 IoC 容器中创建其他 bean 的工厂的 bean。 从概念上讲，工厂 bean 与工厂方法非常相似，但是它是特定于 Spring 的 bean，可以在构造 bean 的过程中由 Spring IoC 容器识别，并且可以被容器用来实例化其他 bean。 了解如何使用 Spring `FactoryBean`创建 bean。
*   [如何使用静态工厂方法创建 bean](https://howtodoinjava.com/spring/spring-core/spring-create-beans-using-static-factory-method/)
    如果要在 Spring 中通过调用静态工厂方法创建 bean，其目的是将对象创建过程封装在静态方法中，那么您可以使用工厂方法属性。
*   [如何使用`util:constant`从最终静态字段引用中声明 Bean](https://howtodoinjava.com/spring/spring-core/spring-declare-beans-from-final-static-field-references-using-util-constant/)
    如果您在某个 Bean 中具有最终静态字段，并且希望将这些引用用作应用程序上下文文件中的 Bean 注入到另一个 Bean 中， 您可以使用`<util:constant>`标签执行此操作。
*   [如何将外部资源/文件加载到 Spring 上下文中？](https://howtodoinjava.com/spring/spring-core/how-to-load-external-resources-files-into-spring-context/)
    很多时候，您想将外部资源或文件（例如，文本文件，XML 文件，属性文件或图像文件）加载到 Spring 应用程序上下文中。 Spring 的资源加载器提供了统一的`getResource()`方法，可让您通过资源路径检索外部资源。
*   [如何创建 bean 后处理器](https://howtodoinjava.com/spring/spring-core/how-to-create-spring-bean-post-processors/)
    bean 后处理器允许在 bean 初始化回调方法之前和之后进行其他处理。 Bean 后处理器的主要特征是它将一个接一个地处理 IoC 容器中的所有 Bean 实例，而不仅仅是单个 Bean 实例。 学习使用`BeanPostProcessor`接口类创建此类后处理器。
*   [如何解决文本消息：`ResourceBundleMessageSource`示例](https://howtodoinjava.com/spring/spring-core/resolving-text-messages-in-spring-resourcebundlemessagesource-example/)
    对于支持国际化的应用程序，它需要能够解决不同语言环境的文本消息的功能。 Spring 的应用程序上下文可以通过其键解析目标区域设置的文本消息。 了解如何使用`ResourceBundleMessageSource`类支持 i10n。
*   [如何发布和监听应用程序事件](https://howtodoinjava.com/spring/spring-core/how-to-publish-and-listen-application-events-in-spring/)
    有时，在您的 spring 应用程序中，您可能希望添加监听特定事件的功能，以便可以按照应用程序逻辑处理这些事件。 让我们学习如何在 spring 应用程序中实现此发布和监听事件。
*   [如何使用`@Component`，`@Repository`，`@Service`和`@Controller`注解？](https://howtodoinjava.com/spring/spring-core/how-to-use-spring-component-repository-service-and-controller-annotations/)
    在具有`@Component`，`@Repository`，`@Service`和`@Controller`注解的情况下，启用自动组件扫描后，spring 会自动将 bean 导入容器，因此您不必定义它们来明确地使用 XML。 这些注解也称为构造型注解。
*   [`@Required`注解和`RequiredAnnotationBeanPostProcessor`示例](https://howtodoinjava.com/spring/spring-core/spring-required-annotation-and-requiredannotationbeanpostprocessor-example/)
    在实际的应用程序中，您不会对检查上下文文件中配置的所有 Bean 属性感兴趣。 相反，您只想检查是否仅在某些特定的 Bean 中设置了特定的属性集。 Spring 使用`dependency-check`属性的依赖项检查功能在这种情况下将无法为您提供帮助。 因此，要解决此问题，可以使用`@Required`注解。

## Spring 框架最佳实践

*   [编写 Spring 配置文件的 13 个最佳实践](https://howtodoinjava.com/spring/spring-core/13-best-practices-for-writing-spring-configuration-files/)
    Spring Bean，依赖项以及 Bean 所需的服务在 xml 配置文件或注解中指定。 但是，XML 配置文件是冗长且更干净的。 如果未正确计划和编写，在大型项目中将变得非常难以管理。 在本文中，我将向您展示编写 Spring XML 配置的 13 种最佳实践。

## 控制反转和依赖注入

*   [控制反转（IoC）和依赖注入（DI）模式](https://howtodoinjava.com/spring/spring-core/inversion-of-control-ioc-and-dependency-injection-di-patterns-in-spring-framework-and-related-interview-questions/)
    在传统编程中，业务逻辑流由静态分配给彼此的对象确定。 在控制反转的情况下，流程依赖于由汇编程序实例化的对象图，并且通过抽象定义对象交互来使流程成为可能。 绑定过程是通过依赖项注入实现的。 阅读这篇文章以获取详细信息。

## Spring REST

*   [使用 Spring 3 MVC 的 REST API](https://howtodoinjava.com/spring/spring-restful/how-to-write-restful-webservices-using-spring-3-mvc/)
    使用 Spring 3 mvc 创建 RESTful Web 服务应用程序的逐步指南。 这篇文章涵盖了所有需要的依赖项，应用的注解和有效的应用程序演示，您可以免费下载。
*   [Spring REST Hello World XML 示例](https://howtodoinjava.com/spring/spring-restful/spring-rest-hello-world-xml-example/)
    学习编写能够返回资源 XML 表示形式的 REST API。
*   [Spring REST Hello World JSON 示例](https://howtodoinjava.com/spring/spring-restful/spring-rest-hello-world-json-example/)
    学习编写能够返回资源的 JSON 表示形式的 REST API。
*   [Spring RESTFul 客户端 – `RestTemplate`示例](https://howtodoinjava.com/spring/spring-restful/spring-restful-client-resttemplate-example/)
    了解如何构建 RESTFul 客户端以使用前面示例中编写的 REST API。

## Spring ORM

*   [Spring 3 和 hibernate 集成教程，并带有示例](https://howtodoinjava.com/spring/spring-orm/spring-3-and-hibernate-integration-tutorial-with-example/)
    。本教程重点介绍将 [Hibernate](https://howtodoinjava.com/hibernate-tutorials/) 与 Spring 3 框架一起使用。 我将展示这种集成的结果，一个基本的端到端应用程序流看起来如何。
*   [Spring 3.2.5.RELEASE 和 Hibernate 4 集成示例](https://howtodoinjava.com/spring/spring-orm/spring-3-2-5-release-and-hibernate-4-integration-example-tutorial/)
    在前面的示例中，很多人都在解决 Maven 依赖切面挣扎。 在此示例中，我在项目源代码本身中添加了所有必需的 jar 文件。 另外，我已经将 spring 的版本从 3.0.5 升级到 3.2.5.RELEASE。
*   [Spring `AbstractRoutingDataSource`示例](https://howtodoinjava.com/spring/spring-orm/spring-3-2-5-abstractroutingdatasource-example/)
    `AbstractRoutingDataSource`是 Spring 框架中非常有用的功能，如果您的设计允许根据某些标准对多个数据库进行更改，那么每个用户的要求可能会有所变化。 一个例子可以是数据库的使用。 当用户属于某个语言环境时，可以使用特定的数据库；如果用户属于另一个语言环境，则可以切换到另一个语言环境。
*   [在 Spring JDBC + JPA + HSQLDB 中使用 SQL 脚本](https://howtodoinjava.com/spring/spring-jdbc/using-sql-scripts-with-spring-jdbc-jpa-hsqldb/)
    在应用程序启动时在 Spring 中使用自定义 SQL 脚本初始化数据库，并在其中填充适当的表和数据。

## Spring 整合

*   [Spring 3 与 HornetQ 的独立集成](https://howtodoinjava.com/spring/spring-integration/spring-3-hornetq-standalone-integration-example/)
    HornetQ 是一个开源项目，用于构建多协议，可嵌入式，非常高性能的集群异步消息传递系统。 HornetQ 具有很大的灵活性，可以通过一些现有的应用程序框架进行配置。 在这篇文章中，我将演示在 Spring 3 中使用 HornetQ。
*   [Spring 4 + Struts 2 + Hibernate 集成](https://howtodoinjava.com/struts-2/spring-4-struts-2-hibernate-integration-tutorial/)
    当将 Spring 框架与 Struts 和 Hibernate 结合在一起时，要牢记所有重要点。
*   [Spring 3 与 Maven 的 JSTL 集成](https://howtodoinjava.com/maven/how-to-add-jstl-support-in-spring-3-using-maven/)
    如何使用 maven 构建工具向 Spring 3 添加 JSTL 支持。

## 杂项示例

*   [Spring Email：JavaMailSender 示例](https://howtodoinjava.com/spring/spring-core/send-email-with-spring-javamailsenderimpl-example/)
    一个简单的示例，展示了如何使用 Spring 框架发送电子邮件。

## Spring 单元测试

*   [junit 中的单元测试授权](https://howtodoinjava.com/junit/how-to-unit-test-spring-security-authentication-with-junit/)
    这篇文章的主要目的是描述如何以编程方式构建完全填充的身份验证对象，然后将其用于单元测试以及可能在应用程序代码本身中的方法。

## Spring 事务

*   [带有加载时织入的非公共方法上的 Spring 事务](https://howtodoinjava.com/spring/spring-transaction/spring-transactions-on-non-public-methods-with-load-time-weaving/)
    了解如何在非公共方法上的任何 spring 应用程序中应用事务（通过默认 spring，AOP 只能建议 IoC 中声明的 bean 的公共方法容器）。 使用这种技术，您可以管理非公共方法的事务，也可以管理任何方法在 Spring IoC 外部创建的对象中的事务。

## 参考文献

[Spring 3 文档](https://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/)
[Spring 4 文档](https://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/)