Spring 和 JavaEE的關係

Java EE vs Spring. Or: What is a standard? html

什麼是JavaEE

J2EE是一系列技術標準所組成的平臺。 JavaEE包含了對一系列標準(接口)的實現。 若是你要用這些接口,恐怕要使用JavaEE服務器而不單單是一個Servlet容器java

Servlet-API

Servlet變準是如何執行的web

由於湯姆貓實現了servlet-api因此它知道怎麼去找web.xml文件。spring

JPA規範

對於tomcat來講,他沒有實現JPA規範,因此當你真的要在你的web應用裏頭實現數據庫訪問sql

  • 能夠簡單使用JDBC,這一點是不受限制的,由於JDBC不是JavaEE的東西,你們均可以用,JDBC只是Java數據庫鏈接

看一下人家sqlite實現的接口數據庫

package org.sqlite;

public class JDBC implements java.sql.Driver {
    public static final java.lang.String PREFIX = "jdbc:sqlite:";

    public JDBC() { /* compiled code */ }

    public int getMajorVersion() { /* compiled code */ }

    public int getMinorVersion() { /* compiled code */ }

    public boolean jdbcCompliant() { /* compiled code */ }

    public boolean acceptsURL(java.lang.String url) { /* compiled code */ }

    public static boolean isValidURL(java.lang.String url) { /* compiled code */ }

    public java.sql.DriverPropertyInfo[] getPropertyInfo(java.lang.String url, java.util.Properties info) throws java.sql.SQLException { /* compiled code */ }

    public java.sql.Connection connect(java.lang.String url, java.util.Properties info) throws java.sql.SQLException { /* compiled code */ }

    static java.lang.String extractAddress(java.lang.String url) { /* compiled code */ }

    public static java.sql.Connection createConnection(java.lang.String url, java.util.Properties prop) throws java.sql.SQLException { /* compiled code */ }
}
  • 必定要使用JPA的話,能夠參考這篇文章 JDBC改JPA

JDBC訪問數據庫的主要工做包括:apache

  • 獲得JDBC驅動程序;
  • 使用DriverManager,Connection,Statement,ResultSet等; 而使用JPA完成數據的操做包括:
  • 獲得JDBC驅動程序;
  • 獲得持久性提供者相關類庫和配置文件;
  • 提供實體類;
  • 使用Persistence、EntityManagerFactory和Entity等接口。

而工業界相似於JPA規範的,有Hibernateapi

Spring

那麼問題來了,Spring依賴了什麼javaee規範呢?tomcat

Spring只依賴於servlet-api。服務器

可是,Spring的可擴展性強得使人髮指,對於實現JPA規範,他有Spring Data JPA, 它依賴於openjpa-persistence-jdbc,而openjpa實現了JSR-317 Java Persistence 2.0規範,因此的話它仍舊是能夠在Tomcat裏頭用。注意JPA規範用的是persitence.xml的配置文件,這個好理解,跟web.xml是一個道理的。

回過頭來,若是你不想用JPA,大能夠用Spring自帶的JDBCTemplate,它是處在org.springframework.jdbc.core裏頭的。

總結

Spring的核心仍然在於CDI,正是由於這個緣由,哪怕它不去實現大部分的JavaEE規範,它也能夠去兼容這些規範的實現,而後利用CDI,注入這些實現。

認識還不夠全面,但願之後還能再改改這篇文章。

相關文章
相關標籤/搜索