毫无疑问,Spring Framework是最受欢迎的Java框架之一,通过提供依赖注入和控制反转等特性,可以轻松创建真实的企业级Java应用程序。但是,Spring不仅是一个DI和IOC框架。通过提供有用的抽象层,它可以简化许多Java API,例如JDBC,JMS,Java Mail等。使用Spring的JdbcTempalte和其他实用程序类使用JDBC要容易得多。它们删除了大多数与开发SQL语句和处理ResultSet相关的 Java开发人员面临的摩擦,以获取他们想要的Java对象。
因此,当学习Spring框架时,不仅要学习如何使用它,还要了解如何在Java和面向对象编程中编写更好的代码。在本文中,将分享在学习Spring时遇到的一些最佳实践
1.接口编码
这是在阅读Head First Design Pattern时首先学到的旧OOP指南。该OOP设计原则的主要目的是减少两个类之间的耦合,从而提高灵活性。
Spring严格遵循这个面向对象的准则,并经常暴露一个接口来使用密钥类,例如创建JdbcOperation接口以利用JdbcTemplate。这种做法促进了不同层之间的松散耦合。
另一个很好的例子是Cache 接口,用于提供缓存。所有其他缓存实现,例如EhCache,ConcurrentMapCache和NoOpCache实现这个接口。
如果你的代码依赖于Cache接口而不依赖于任何特定实现,则可以切换缓存提供程序而不会影响代码的其他部分。
下面是使用Collection框架在Java中编写接口的简单代码示例。如果仔细观察,在这个示例中,我使用了一个接口而不是实现来声明Java中的变量、参数和返回方法类型。
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* Program to demonstrate coding for interfaces in Java
* @author WINDOWS 8
*
*/
public class Hello {
public static void main(String args[]) {
// Using interface as variable types
List rawMessage = Arrays.asList("one", "two", "three");
List allcaps = toCapitalCase(rawMessage);
System.out.println(allcaps);
}
/**
* Using Interface as type of argument and return type
*/
public static List toCapitalCase(List messages) {
return messages.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
}
}
这种编码风格灵活,将来更容易更改。
2. 检查异常和未经检查异常
如果你使用过Spring framework,就会注意到Spring更喜欢未检查的异常而不是已检查的异常,最好的例子是Spring JDBC。
Spring有一个丰富的异常层次结构,用于描述从数据库中连接和检索数据时可能出现的不同错误,但是这些错误的根源是DataAccessException,它是未选中的。
Spring认为,大多数都是由于无法在catch块中纠正错误造成的,因此它决定捕获开发人员的异常,而不是像Java那样强制它们。结果是代码更整洁,没有空的catch块,并且try-catch块更少。这也是在Java中处理错误和异常时的最佳实践之一。
3.模板设计模式的使用
Spring大量使用Template方法设计模式来简化事情。一个很好的例子是JdbcTemplate,它在使用JDBC API时消除了很多麻烦。你只要定义需要的内容,Spring负责流程的其余部分。
如果不知道模板设计模式定义了一个过程或算法,你不可能改变这个过程,但你可以根据你的需求来制定步骤.
例如,在处理JDBC时,可以使用JdbcTemplate执行查询并获得所需的对象。你只需要提供在每种情况下都不同的SQL,以及将行从表映射到对象的映射逻辑。
这是一个很好的图表,它很好地解释了模板设计模式。你可以看到每个人都有一些共同的任务,但他们做了不同的工作,并且很好地通过Template方法捕获。它们所需要定义的是它们的工作,它们通过将work()定义为一个抽象方法来定义它们的工作。
这就是您可以从Spring框架中学到的一些Java最佳实践,无论如何,如果您遇到过从Spring Framework学到的任何其他最佳实践,请在评论中与我们分享。