美文网首页
Spring入门

Spring入门

作者: iDevOps | 来源:发表于2019-09-23 17:15 被阅读0次

简介

Spring是什么

一个分层的JavaSE/EE full-stack(一站式)轻量级开源框架,以IoC和AOP为核心,提供了表现层Spring MVC 和持久层Spring JDBC以及业务层事务管理等众多的企业级应用技术。

为什么学习Spring
  • 方便解耦,简化开发

通过Spring提供的Ioc容器, 将对象之间的依赖关系交由Spring进行控制,避免硬编码造成的程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些底层的需求编写代码,可以更专注于上层的应用。

  • AOP编程的支持

通过Spring提供的AOP功能,方便进行面向切面编程,需要不容易用传统OOP实现的功能可以通过AOP轻松实现。

  • 声明式事务的支持

在Spring中,我们可以从单调的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。

  • 方便程序的测试

可以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring中,测试不再是昂贵的操作,而是随手可做的事,例如Spring对Junit4支持,可以通过注解方便的测试Spring程序。

  • 方便集成各种优秀框架

Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度。

  • 降低Java EE API的使用难度

Spring对很多难的Java EE API(入JDBC、JavaMail、远程调用等)提供了一个薄薄的封装,通过Spring的简易封装,这些JavaEE API的使用难度大大降低。

  • Java源码是经典学习案例

Spring源码设计精妙,结构清晰,匠心独运,处处体现大师对Java设计模式灵活运用以及对Java技术的高深造诣,Spring框架源码无疑是Java技术的最佳实践。如果想短时间提高自己的Java技术水平和应用开发水平,学习和研究Spring源码将会使你收到意想不到的效果。

Spring的体系结构
Spring的体系结构
Spring核心概念
  • IoC

Inverse of Control,控制反转。对象的创建权力由程序反转给Spring框架。

  • DI

Dependency Injection,依赖注入,在Spring框架创建Bean对象时,动态的将依赖对象注入到Bean组件中。

  • AOP

Aspect Oriented Programming,面向切面编程。在不修改目标对象的源代码情况下,增强IoC容器中Bean的功能。

  • Spring容器

指的就是IoC容器,底层就是一个BeanFactory。

Spring的模块

核心模块
  • core

每个Spring应用程序都需要的主要模块。

  • beans

该模块包含了所有支持Spring对Spring bean进行操作的类,例如Ioc和DI等,BeanFactory是该模块的核心接口。

  • context

扩展了BeanFactory,ApplicationContext是该模块的核心。

  • expression

该模块包含Spring Expression Language(SpEL)的所有支持类

AOP和设备支持
  • aop

AOP主要的实现模块,以动态代理技术为基础。

  • aspects

spring-aspects模块集成自AspectJ,主要为SpringAOP提供多种AOP实现方法。

  • instrument

算是AOP的一个支援模块,主要作用是在JVM启动时,生成一个代理类,程序员通过代理类在运行时修改类的字节,从而改变一个类的功能,实现AOP功能。

数据访问及集成
  • jdbc

该模块包含所有的JDBC支持类。对于需要数据库访问的所有应用程序,都需要该模块。支持数据源、 JDBC数据类型、 JDBC模板、本地 JDBC 连接等的类都被被包在此模块中

  • tx

该模块提供支持Spring事务基础架构的所有类,可以从事务抽象层找到相应的类来支持Java Transaction APl(JTA)以及与主要供应商的应用程序服务器的集成

  • orm

该模块扩展了Spring的标准JDBC功能集,支持流行的ORM工具,包括Hibernate、JDO、JP和数据映射器iBATIS。该JAR 文件中的许多类都依赖于Spring jdbc JAR 文件中所包含的类, 因此也需要把它包含在应用程序中

  • jms

该模块包含JMS支持的所有类

  • oxm

主要提供一个抽象层以支持OXM,OXM是Object-to-XML-Mapping的缩写,将java对象映射成XML数据,或将XML数据映射成java对象。

Web
  • web

此模块包含在 Web 应用程序中使用 Spring 所需的核心类,包括用于自动加载ApplicationContext 功能的类、文件上传支持类以及一些用于执行重复任务的类

  • web-mvc

SpringMVC核心模块

  • webfsocket

该模块提供对JSR-356(WebSocke Java API) 的支持

  • webflux

新的非堵塞函数式ReactiveWeb框架,可以用来建立异步的、非阻塞、事件驱动的服务,并且扩展性非常好

报文发送
  • messaging

为Spring集成一些基础的报文发送的功能。

Test测试
  • test

Spring提供一组模拟类来帮助测试应用程序,并且许多模拟类都在Spring测试套件中使用,所以它们都经过了很好的测试,从而使测试应用程序变得更简单,在对 Web 应用程序进行单元测试时会发现模拟
HttpServletRequest和HttpSevletResponse类所带来的好处,另一方面Spring提供了与JUnit单元测试框架的紧密集成,并且在该模块中提供了许多支持JUnit 测试用例开发的类:例如 SpringJUnit4ClassRunner提供了一种在单元测试环境中Spring ApplicationContext的简单方法

其他模块
  • beans-groovy

该模块包含支持Spring对Spring bean进行操作额Groovy类

  • context-support

该模块包含对spring-context 快的进一步扩展, 在用户界面方面,有一些用于支持邮件并与模板引擎(例如 Velocity, FreeMarker和JasperReport)集成的类 , 此外,还包括与各种任务执行和调度库(包括 CommonJ和Quartz)的集成。

入门案例

我们这里使用Spring 5.2.1这个版本

核心依赖
<dependencies>
        <!--Spring的三个核心依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.2.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.2.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.1.RELEASE</version>
        </dependency>
    </dependencies>
创建类
package com._54programer.service;

public class UserService {
    public void getUser(){
        System.out.println("getUser ....");
    }
}

配置文件

参考官方文档新建resources/spring.xml


参考官方文档
<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="userService" class="com._54programer.service.UserService"></bean>

</beans>
测试
//1.使用ApplicationContext接口获取Spring容器
ApplicationContext app = new ClassPathXmlApplicationContext("spring.xml");
//2.根据bean的id获取对象
UserService userService = (UserService) app.getBean("userService");
userService.getUser();

通过测试我们发现确实可以通过Spring容器获取我们要的Bean对象。

相关文章

网友评论

      本文标题:Spring入门

      本文链接:https://www.haomeiwen.com/subject/ctjbyctx.html