目录

spring入门

Spring官网

Spring中文文档

Spring官方下载地址

简介

Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。目的是解决企业应用开发的复杂性。

Spring的特点

  1. 使用接口而不是使用类,是更好的编程习惯。Spring将使用接口的复杂度几乎降低到了零。

  2. 为JavaBean提供了一个更好的应用配置框架。

  3. 更多地强调面向对象的设计,而不是现行的技术如JAVA EE。

    面向对象的设计比任何实现技术(比如JAVA EE)都重要。

  4. 尽量减少不必要的异常捕捉。

    在Java中,已检查异常(Checked exception)被过度使用。框架不应该迫使你捕获不能恢复的异常。

  5. 使应用程序更加容易测试。

  6. Spring不和现有的解决方案竞争,而是致力于将它们融合在一起。

spring核心技术

  • IOC 容器
  • Aop
  • JdbcTemplate
  • 事务管理
  • Spring5 新特性

框架层次图

https://gitee.com/lienhui68/picStore/raw/master/null/20201011221501.png

jar包功能解释

spring.jar 是包含有完整发布模块的单个jar 包。但是不包括mock.jar,aspects.jar, spring-portlet.jar, and spring-hibernate2.jar。

除了spring.jar 文件,Spring 还包括有其它21 个独立的jar 包,各自包含着对应的Spring组件,用户可以根据自己的需要来选择组合自己的jar 包,而不必引入整个spring.jar的所有类文件。

  1. spring-aop

    这个jar 文件包含在应用中使用Spring 的AOP 特性时所需的类和源码级元数据支持。

    使用基于AOP 的Spring特性,如声明型事务管理(Declarative Transaction Management),也要在应用里包含这个jar包。

    外部依赖spring-core, (spring-beans,AOP Alliance, CGLIB,Commons Attributes)。

    关于org.springframework.asm ,Spring独立的asm程序, Spring2.5.6的时候需要asmJar包,3.0开始提供他自己独立的asmJar。

  2. spring-aspects

    提供对AspectJ的支持,以便可以方便的将面向方面的功能集成进IDE中,比如Eclipse AJDT。

  3. spring-beans

    这个jar 文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean 以及进行Inversion ofControl / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI 支持,引入spring-core.jar 及spring-beans.jar 文件就可以了。

    外部依赖spring-core,(CGLIB)。

  4. spring-context

    这个jar 文件为Spring 核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI 所需的全部类,instrumentation组件以及校验Validation 方面的相关类。

    外部依赖spring-beans, (spring-aop)。

  5. spring-context-support

    包含支持缓存Cache(ehcache)、JCA、JMX、 邮件服务(Java Mail、COS Mail)、任务计划Scheduling(Timer、Quartz)方面的类。

    以前的版本中应该是这个:spring-support.jar这个jar 文件包含支持UI模版(Velocity,FreeMarker,JasperReports),邮件服务,脚本服务(JRuby),缓存Cache(EHCache),任务计划Scheduling(uartz)方面的类。

    外部依赖spring-context, (spring-jdbc, Velocity,FreeMarker, JasperReports, BSH, Groovy,JRuby, Quartz, EHCache)

  6. spring-core

    Spring的核心工具包。Spring 其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。

    外部依赖Commons Logging, (Log4J)。

  7. spring-expression

    Spring表达式语言

  8. spring-instrument

    Spring对服务器的代理接口

  9. spring-instrument-tomcat

    Spring3.0对Tomcat的连接池的集成。

  10. spring-jdbc

    这个jar 文件包含对Spring 对JDBC 数据访问进行封装的所有类。

    外部依赖spring-beans,spring-dao。

  11. spring-jms

    这个jar包提供了对JMS 1.0.2/1.1的支持类。

    外部依赖spring-beans,spring-dao,JMS API。

    此外,还有下面这些以spring-j*开头的包,本人还没用过。

    spring-jmx.jar

    这个jar包提供了对JMX 1.0/1.2的支持类。外部依赖spring-beans,spring-aop, JMX API。

    spring-jca.jar

    对JCA 1.0的支持。外部依赖spring-beans,spring-dao, JCA API。

    spring-jdo.jar

    对JDO 1.0/2.0的支持。外部依赖spring-jdbc, JDO API, (spring-web)。

    spring-jpa.jar

    对JPA 1.0的支持。外部依赖spring-jdbc, JPA API, (spring-web)。

  12. spring-messaging

    spring-messaging模块为集成messaging api和消息协议提供支持

    参考 http://www.cnblogs.com/davidwang456/p/4446796.html

  13. spring-orm

    包含Spring对DAO特性集进行了扩展,使其支持iBATIS、JDO、OJB、TopLink, 因为Hibernate已经独立成包了,现在不包含在这个包里了。这个jar文件里大部分的类都要依赖spring-dao.jar里的类,用这个包时你需要同时包含spring-dao.jar包。

  14. spring-oxm

    Spring 对Object/XMl的映射支持,可以让Java与XML之间来回切换。

  15. spring-test

    对Junit等测试框架的简单封装。

  16. spring-tx

    以前是在这里org.springframework.transaction

    为JDBC、Hibernate、JDO、JPA、Beans等提供的一致的声明式和编程式事务管理支持。

  17. spring-web

    这个jar 文件包含Web 应用开发时,用到Spring 框架时所需的核心类,包括自动载入Web ApplicationContext 特性的类、Struts 与JSF 集成类、文件上传的支持类、Filter 类和大量工具辅助类。

    外部依赖spring-context, Servlet API, (JSP API, JSTL,Commons FileUpload, COS)。

    org.springframework.web.portlet SpringMVC的增强。

    org.springframework.web.servlet 对J2EE6.0的Servlet3.0的支持。

    org.springframework.web.struts Struts框架支持,可以更方便更容易的集成Struts框架。

  18. spring-webmvc

    这个jar 文件包含Spring MVC 框架相关的所有类。包括框架的Servlets,Web MVC框架,控制器和视图支持。当然,如果你的应用使用了独立的MVC 框架,则无需这个JAR 文件里的任何类。

    外部依赖spring-web, (spring-support,Tiles,iText,POI)。

  19. spring-webmvc-protlet

    SpringMVC的增强

  20. spring-websocket

  21. spring-dao

    这个jar文件包含Spring DAO、Spring Transaction进行数据访问的所有类。为了使用声明型事务支持,还需在自己的应用里包含spring-aop.jar。

    关于spring-dao.jar(3.x版本里,没有发现这个包)

    外部依赖spring-core,(spring-aop, spring-context, JTA API)。

  22. spring-remoting

    这个jar文件包含支持EJB、远程调用Remoting(RMI、Hessian、Burlap、Http Invoker、JAX-RPC)方面的类。

    外部依赖spring-aop, (spring-context,spring-web,Hessian,Burlap,JAX-RPC,EJB API)。

  23. spring-portlet

    spring自己实现的一个类似Spring MVC的框架。包括一个MVC框架和控制器。 外部依赖spring-web, Portlet API,(spring-webmvc)。

jar包说明小结

  • org.springframework.aop——Spring的面向切面编程,提供AOP(面向切面编程)的实现
  • org.springframework.asm——spring2.5.6的时候需要asm jar包,spring3.0开始提供它自己独立的asm jar
  • org.springframework.aspects——Spring提供的对AspectJ框架的整合
  • org.springframework.beans——所有应用都用到,包含访问配置文件,创建和管理bean等,是Spring IOC的基础实现。
  • org.springframework.context.support——Springcontext的扩展支持,用于MVC方面
  • org.springframework.context——提供在基础IOC功能上的扩展服务,此外还提供许多企业级服务的支持,有邮件服务、任务调度、JNDI定位,EJB集成、远程访问、缓存以及多种视图层框架的支持。
  • org.springframework.core——Spring的核心工具包,其他包依赖此包
  • org.springframework.expression——Spring表达式语言
  • org.springframework.instrument.tomcat——Spring对tomcat连接池的集成
  • org.springframework.instrument——Spring对服务器的代理接口
  • org.springframework.jdbc——对JDBC 的简单封装
  • org.springframework.jms——为简化jms api的使用而做的简单封装
  • org.springframework.orm——整合第三方的orm实现,如hibernate,ibatis,jdo以及spring 的jpa实现
  • org.springframework.oxm——Spring对于object/xml映射的支持,可以让JAVA与XML之间来回切换
  • org.springframework.test——对JUNIT等测试框架的简单封装
  • org.springframework.transaction——为JDBC,HIBERNATE,JDO和JPA提供的一致性的声明式和简单编程式事务管理
  • org.springframework.web.portlet——SpringMVC的增强
  • org.springframework.web.servlet——对J2EE6.0servlet3.0的支持
  • org.springframework.web.struts——整合struts框架的支持,可以更方便更容易的集成Struts框架。
  • org.springframework.web——包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。

jar包依赖说明小结

  • spring-core.jar需commons-collections.jar,spring-core.jar是以下其它各个的基本。
  • spring-beans.jar需spring-core.jar,cglib-nodep-2.1_3.jar
  • spring-aop.jar需spring-core.jar,spring-beans.jar,cglib-nodep-2.1_3.jar,aopalliance.jar
  • spring-context.jar需spring-core.jar,spring-beans.jar,spring-aop.jar,commons-collections.jar,aopalliance.jar
  • spring-dao.jar需spring-core.jar,spring-beans.jar,spring-aop.jar,spring-context.jar
  • spring-jdbc.jar需spring-core.jar,spring-beans.jar,spring-dao.jar
  • spring-web.jar需spring-core.jar,spring-beans.jar,spring-context.jar
  • spring-webmvc.jar需spring-core.jar/spring-beans.jar/spring-context.jar/spring-web.jar
  • spring -hibernate.jar需spring-core.jar,spring-beans.jar,spring-aop.jar,spring-dao.jar,spring-jdbc.jar,spring-orm.jar,spring-web.jar,spring-webmvc.jar
  • spring-orm.jar需spring-core.jar,spring-beans.jar,spring-aop.jar,spring-dao.jar,spring-jdbc.jar,spring-web.jar,spring-webmvc.jar
  • spring -remoting.jar需spring-core.jar,spring-beans.jar,spring-aop.jar,spring-dao.jar,spring-context.jar,spring-web.jar,spring-webmvc.jar
  • spring-support.jar需spring-core.jar,spring-beans.jar,spring-aop.jar,spring-dao.jar,spring-context.jar,spring-jdbc.jar
  • spring-mock.jar需spring-core.jar,spring-beans.jar,spring-dao.jar,spring-context.jar,spring-jdbc.jar

HelloWorld

引入核心依赖

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${springframework.version}</version>
    </dependency>
    <!--核心组件-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${springframework.version}</version>
    </dependency>
    <!--管理beans,JavaBean机制-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${springframework.version}</version>
    </dependency>
    <!--Spring EL表达式 (SpEL)-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-expression</artifactId>
        <version>${springframework.version}</version>
    </dependency>

    <!-- 引入日志包 -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.12</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>1.1.7</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.1.7</version>
    </dependency>
</dependencies>

tt

注:最好引入自己的日志包,不使用自带的,可以有颜色高亮等功能

HelloWorld

1
2
3
4
5
6
7
8
9
package com.eh.eden.spring.demo;

public class HelloWorld {

    public void say() {
        System.out.println("HelloWorld");
    }

}

bean.xml

1
2
3
4
5
6
7
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="helloWorld" class="com.eh.eden.spring.demo.HelloWorld"/>
</beans>

测试类

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
package com.eh.eden.spring.demo;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.testng.annotations.Test;

public class HelloWorldTest {

    @Test
    public void testSay() {
        // 1. 加载spring配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

        // 2. 获取配置创建的对象
        HelloWorld helloWorld = context.getBean("helloWorld", HelloWorld.class);

        helloWorld.say();

    }
}

运行结果:

1
2
3
4
5
6
[TestNG] Running:
  /Users/david/Library/Caches/IntelliJIdea2019.1/temp-testng-customsuite.xml
20201011 22:59:27 [main] DEBUG o.s.context.support.ClassPathXmlApplicationContext - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@2f8f5f62
20201011 22:59:27 [main] DEBUG o.s.beans.factory.xml.XmlBeanDefinitionReader - Loaded 1 bean definitions from class path resource [beans.xml]
20201011 22:59:27 [main] DEBUG o.s.b.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'helloWorld'
HelloWorld