Spring 和 JavaEE的关系

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

什么是JavaEE

J2EE是一系列技术标准所组成的平台。
JavaEE包含了对一系列标准(接口)的实现。
如果你要用这些接口,恐怕要使用JavaEE服务器而不仅仅是一个Servlet容器

Servlet-API

Servlet变准是如何执行的

因为汤姆猫实现了servlet-api所以它知道怎么去找web.xml文件。

JPA规范

对于tomcat来说,他没有实现JPA规范,所以当你真的要在你的web应用里头实现数据库访问

  • 可以简单使用JDBC,这一点是不受限制的,因为JDBC不是JavaEE的东西,大家都可以用,JDBC只是Java数据库连接

看一下人家sqlite实现的接口

public static final java.lang.String PREFIX = "jdbc: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访问数据库的主要工作包括:

  • 得到JDBC驱动程序;
  • 使用DriverManager,Connection,Statement,ResultSet等;
    而使用JPA完成数据的操作包括:
  • 得到JDBC驱动程序;
  • 得到持久性提供者相关类库和配置文件;
  • 提供实体类;
  • 使用Persistence、EntityManagerFactory和Entity等接口。

而工业界类似于JPA规范的,有Hibernate

Spring

那么问题来了,Spring依赖了什么javaee规范呢?

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,注入这些实现。

认识还不够全面,希望以后还能再改改这篇文章。

时间: 2024-09-20 18:07:36

Spring 和 JavaEE的关系的相关文章

Spring Cloud与Spring Boot版本匹配关系

Spring Cloud版本演进情况如下: 版本名称 版本Finchley snapshot版Edgware snapshot版Dalston SR1 当前最新稳定版本Camden SR7 稳定版本Brixton SR7 稳定版本Angel SR6 稳定版本 Spring Cloud与Spring Boot版本匹配关系: Finchley 兼容Spring Boot 2.0.x,不兼容Spring Boot 1.5.xDalston和Edgware 兼容Spring Boot 1.5.x,不兼容

Spring <bean> 之间的关系&整合多个配置文件

Spring 不但可以通过 <ref>  引用另一个 Bean,建立起 Bean 和 Bean 之间的依赖关系,<bean> 元素标签之间也可以建立类似的关系,完成一些特殊的功能. 1.继承 OOP思想告诉我们,如果多个类拥有相同的方法和属性,则可以引入一个父类,在父类中定义这些类共同的方法和属性,以消除重复的代码.同样,如果多个 <bean> 存在相同的配置信息,则 Spring 允许定义一个父<bean>,子<bean>将自动继承父<b

Spring Bean之间的关系

bean之间的关系:继承和依赖继承bean的配置 Spring允许继承bean的配置,被继承的bean称为父bean,继承这个父bean的bean称为子bean 子bean从父bean中继承配置,包括bean的属性配置 子bean也可以覆盖从父bean继承过来的配置 父bean可以作为配置模版,也可以作为bean实例,若只想把父bean作为模板,可以设置<bean>的abstract属性为true,这样Spring将不会实例化这个bean 并不是<bean>元素里的所有属性都会被继

Spring之对象依赖关系(依赖注入Dependency Injection)

承接上篇: Spring中,如何给对象的属性赋值: 1:通过构造函数,如下所示: <!-- 1:构造函数赋初始值 --><bean id="user1" class="com.bie.po.User"><constructor-arg value="10010" type="int"></constructor-arg>      <constructor-arg valu

struts,spring和hibernate的关系(转载)

本文属于转载,来自百度提问http://zhidao.baidu.com/question/213823575.html?qbl=relate_question_0&word=beans%20public SSH:Struts(表示层)+Spring(业务层)+Hibernate(持久层)Struts:Struts是一个表示层框架,主要作用是界面展示,接收请求,分发请求.在MVC框架中,Struts属于VC层次,负责界面表现,负责MVC关系的分发.(View:沿用JSP,HTTP,Form,Ta

Spring和SpringMVC的关系

1.Spring和SpringMVC是父子容器关系. 2.Spring整体框架的核心思想是容器,用来管理bean的生命周期,而一个项目中会包含很多容器,并且它们分上下层关系,目前最常用的一个场景是在一个项目中导入Spring和SpringMVC框架,而Spring和SpringMVC其实就是两个容器,Spring是父容器,SpringMVC是子容器,Spring父容器中注册的Bean对SpringMVC子容器是可见的,反之则不行. 3.按照官方文档推荐,根据不同的业务模块来划分不同的容器中注册不

Spring与SpringMVC的关系

在此鉴于你已经了解过Spring的相关知识,简单描述一下Spring与Spring的关系 在框架的使用中,Spring类似于一个具有多种特性,也可以说是多种功能模块的应用平台,(特性就比如IoC,AOP,事务处理,持久化驱动等等),并且可以用来与其他一些优秀并流行的开源框架进行快速的整合.对于一个完整的WEB框架或应用平台来说,MVC模型的模块一定是必不可少的,而SpringMVC就是建立在Spring应用平台之上的MVC模型. 以Tomcat为例,IoC容器通常在WEB容器初始化的时候就选择去

关于 tomcat nio connector, servlet 3.0 async, spring mvc async 的关系

tomcat 的 org.apache.coyote.http11.Http11NioProtocol Connector 是一个使用 Java NIO 实现的异步 accept 请求的 connector 它的作用是不需要为每个请求建立一个线程, 而是使用固定的accept线程 accept 多个请求, 然后排队处理. 大概的意思是使用固定的 acceptThread 来 accept n 个请求, 然后将请求入队, 最后使用固定的 requestProcessingThread 来处理业务逻

Spring - bean的依赖关系(depends-on属性)

depends-on是bean标签的属性之一,表示一个bean对其他bean的依赖关系.乍一想,不是有ref吗?其实还是有区别的,<ref/>标签是一个bean对其他bean的引用,而depends-on属性只是表明依赖关系(不一定会引用),这个依赖关系决定了被依赖的bean必定会在依赖bean之前被实例化,反过来,容器关闭时,依赖bean会在被依赖的bean之前被销毁. 示例如下: <bean id="beanOne" class="ExampleBean