Java EE vs Spring. Or: What is a standard? html
J2EE是一系列技術標準所組成的平臺。 JavaEE包含了對一系列標準(接口)的實現。 若是你要用這些接口,恐怕要使用JavaEE服務器而不單單是一個Servlet容器java
由於湯姆貓實現了servlet-api因此它知道怎麼去找web.xml文件。spring
對於tomcat來講,他沒有實現JPA規範,因此當你真的要在你的web應用裏頭實現數據庫訪問sql
看一下人家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 */ } }
JDBC訪問數據庫的主要工做包括:apache
而工業界相似於JPA規範的,有Hibernateapi
那麼問題來了,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,注入這些實現。
認識還不夠全面,但願之後還能再改改這篇文章。