Spring Framework的目的

时间:2014-01-15 16:09:29

标签: java spring

我继续学习Spring,所以我决定从here阅读Spring文档。我面对下一个短语:

  

Spring Framework是一个提供全面的Java平台   开发Java应用程序的基础架构支持弹簧   处理基础架构,以便您可以专注于您的应用程序。

什么意味着comprehensive infrastructure据我了解Spring:

  1. 帮助我们绑定整个依赖关系树;
  2. 提供与不同技术\框架的集成等等; (指JPA,JTA,AOP等)
  3. 提供其他服务,例如Spring Social,Big Data等。
  4. comprehensive infrastructure support与上述三个陈述相同吗?

2 个答案:

答案 0 :(得分:4)

Spring Framework还有许多其他功能可以处理并删除您的代码,包括:

  • IoC和AOP,配置应用程序
  • JNDI
  • 交易管理抽象
  • 使用不同技术(例如JDBC和JPA)处理单个事务/连接
  • 确保资源释放(使用模板)
  • 统一事件发送程序
  • 提供常见方面,例如异步方法调用和事务
  • 与JMS,JPA,Hibernate,...
  • 集成
  • 透明远程处理(使用不同技术)
  • MVC Servlet和Portlet框架
  • 轻松实现和使用Web服务(包括REST)
  • 缓存
  • 与许多工具轻松集成,例如CXF,Apache Camel ......

除此之外,Spring Portfolio中还有其他项目可以处理其他事项,只需命名重要项目:

  • Spring Security
  • Spring Integration
  • Spring Batch
  • Spring Data

更多信息:   - Transaction Management Abstraction是Spring为统一访问不同的事务API提供的,例如JTA,JDBC Transaction,Hibernate Transaction,....所以你可以用Hibernate Transaction开始编码并将事务管理器更改为由应用程序管理的容器服务器而不更改任何代码(仅通过更改配置)。

  • 使用基于JDBC的API(以及依赖于JDBC)时,如Hibernate,JPA和MyBatis。 Spring可以处理每个线程的连接/事务的唯一性,因此如果你使用JDBC进行一些查询,一些使用HQL,一些使用JPQL在一个事务中,所有查询都将使用单个连接/事务执行。

  • 在资源管理方面,事情变得很丑陋,例如在处理JDBC工作时,你应该做的事情如下:

    Connection connection = null;
    PreparedStatement statement = null;
    try {
        connection = dataSouce.getConnection();
        statement = connection.prepareStatement('some query');
    
        statement.executeUpdate();
    } catch(SQLException e) {
        throw new SomeWrapperException(e);
    } finally {
        try {
        //    if (statement != null) {
        //        statement.close();
        //    }
            if (connection != null) {
               connection.close();
            }
        } catch (SQLException e) {
            throw new SomeWrapperException(e);
        }
    }
    

    正如您所看到的那样,为了执行单个查询,有很多代码行,我也忽略了关闭Statement(如果我想发布我应该添加更多嵌套try-catch-finally块)。

    使用Spring JdbcTemplate,Spring handles all steps which are just for resource creation, and releasing。您只需编写业务逻辑所需的代码。

    除了JdbcTemplate之外,Spring还提供了一些其他模板,包括JpaTemplate,HibernateTemplate,TransactionTemplate,JmsTemplate,JndiTemplate,RestTemplate,ReflectionUtils,......(以及其他一些Spring Portfolio项目中的其他模板)。好消息是大多数模板的回调都是单方法接口,如果你使用的是Java 8,可以用Java 8 Labmda代替。

  • 使用Spring数据访问模板时,数据访问异常的统一层次结构是另一个特性。因此,如果使用JDBC,Hibernate等,异常将是相同的,因此更改数据访问层的实现不会传播到其他层。

  • Spring可以将aspect应用于其容器中定义的bean。其中一个方面是异步方法调用,其描述为here

  • 您可以使用RMI,WebServices进行远程处理,而无需添加特定于框架的异常(例如RemoteException)或实现接口(例如Remote)。实际上,您的客户端核心并不知道bean的远程性,而远程或本地是一个配置问题,可以看到更多信息here

Spring提供了更多功能,是影响Java EE的最重要的事情之一。实际上,通过查看Spring所做的事情,Java EE 5+开始变得更加简单。 有关更多信息,您应自己深入研究文档。

答案 1 :(得分:1)

我想说他们特指的是前两个。通过综合基础架构,Spring文档意味着它们提供了Inversion of Control和其他低级实现(如JDBC)的抽象。手动将对象连接在一起,连接到数据库,处理不必要的已检查异常等等,这些都不是很有趣,而且会剥夺应用程序的实际工作。