Spring | Spring的基本应用

目录:

1.什么是Spring?

  • Spring 是由Rod Johnson组织和开发的一个分层的Java SE/EE full-stack (一站式 )轻量级开源框架

  • SpringIOC( Inversion of Control ,控制反转 )和 AOP ( Aspect Oriented Programming ,面向切面编程 )为 内核

  • Spring 使用基本JavaBean 来完成以前 只可能由EJB ( Enterprise Java Beans,Java企业Bean )完成的工作,取代了EJB的臃肿、低效的开发模式

  • Spring 致力于Java EE应用各层的解决方案。

    表现层 它提供了Spring MVC等功能;

    业务逻辑层 可以管理事务记录日志等;

    持久层 可以整合MyBatis 等技术。

  • 虽然Spring 贯穿于表现层业务逻辑层持久层 ,但它并不想取代 那些已有的框架,而是以高度的开放性与它们进行无缝整合

2.Spring框架的优点

  • 非侵入式设计
    Spring 是一种非侵入式 ( non-invasive )框架 ,它可以使应用程序代码对框架的依赖最小化

  • 方便解耦简化开发

    Spring就是一个大工厂 , 可以将所有对象的创建 和依赖关系的维护工作 都交给Spring容器
    管理 ,大大地降低了组件之间耦合性

  • 支持AOP

    Spring提供了对AOP 的支持,它允许将一些通用任务 , 如安全事务日志 等进行集中
    处理 ,从而提高了程序的复用性

  • 支持声明式事务处理

    只需要通过配置 就可以完成对事务的管理 ,而无须手动编程

  • 方便程序的测试
    Spring 提供了对Junit4 的支持,可以通过注解方便地测试Spring程序

  • 方便集成各种优秀框架

    Spring不排斥 各种优秀的开源框架,其内部提供了对各种优秀框架的直接支持

  • 降低JavaEE API的使用难度

    Spring对Java EE开发中非常难用的一些AP I (如JDBC 、JavaMail 等),都提供了封
    使这些API应用难度大大降低

3.Spring的体系结构 (重点★★★) :

  • Spring框架 采用的是分层架构,它一系列的功能要素被分成20 个模块,这些模块大体分为
    Core Container (核心容器 )、 Data Access/Integration (数据访问/集成 )、 Web
    AOP ( Aspect Oriented Programming)、InstrumentationMessagingTes t。

    如下图所示。

3.1 Core Container (核心容器) ★★★

  • Spring核心容器 是其他模块建立的基础 ,它主要由①Beans模块 、②Core核心模块
    Context 模块 、④Context- support模块 和 ⑤SpEL ( Spring Expression Language, Spring表达式语言)模块组成。
Beans模块 (★★★) : BeanFactory

Beans模块 :提供了 BeanFactory,工厂模式 的经典实现,Spring将管理对象称为Bean。 ( BeanFactory下面详讲 )

Core核心模块 (★★★) : IOC

Core核心模块 :提供了Spring 框架的 基本组成部分,包括 IOCDI功能。

ps :
SpringIOC( Inversion of Control ,控制反转)和 AOP ( Aspect Oriented Programming ,面向切面编程 )为 内核

Context上下文模块 (★★★) : ApplicationContext

Context上下文模块 : 建立在CoreBeans 模块的基础 之上,它是访问定义配置任何对象媒介 。其中 ApplicationContext接口上下文模块焦点

Context-support模块 (★★★)

Context-support模块 : 提供了对第三方库 嵌入Spring 应用的集成支持

比如 缓存( EhCache、Guava、 JCache )、邮件服务( JavaMail)、任务调度( CommonJ、Quartz )和 模板引擎( FreeMarker、JasperReports、速率)。

SpEL模块

SpEL模块:是Spring 3.0新增的模块 ,它提供了 Spring Expression Language支持

3.2 Data Access / Integration (数据访问/集成)

数据访问/集成层 包括JDBCORMOXMJMSTransactions 模块

JDBC模块 (★★★)

JDBC模块:提供了一个JDBC的抽象层 ,大幅度地减少了在开发过程中对数据库操作的编码

ORM模块

ORM模块:对流行的对象关系映射API , 包括JPAJDOHibernate 提供了集成层

OXM模块

OXM模块:提供了一个支持对象 / XML映射抽象层实现 ,如JAXBCastorXMLBeansJiBXXStream

JMS模块

JMS模块 : 指Java消息传递服务 ,包含使用和产生信息 的特性,自4.1版本后支持与Spring-message 模块的集成

Transactions事务模块 (★★★)

Transactions事务模块 : 支持对实现特殊接口 以及所有POJO类 的编程和声明式的 事务管理

3.3 Web

SpringWeb层 包括WebSocketServletWebPortlet模块。

WebSocket模块

WebSocket模块: Spring 4 .0以后新增的模块,它提供了WebSocketSockJS 的实现,以及对STOMP的支持。

Servlet模块 (★★★)

Servlet模块 : 也称为Spring -webmvc模块,包含了Spring模型 --视图 ---控制器 ( MVC) 和 REST Web Services 实现的 Web应用程序

Web模块 (★★★)

Web模块 :提供了 基本的Web开发集成特性,例如:多文件上传功能 、使用Servlet监听器初始化loC容器以及Web应用上下文。

Portlet模块

Portlet模块 : 提供了在Portlet环境使用MVC实现类似Servlet模块的功能

3.4 其他模块

Spring的 其他模块 还有AOPAspectsInstrumentationMessaging 以及Test模块

AOP模块 (★★★)

AOP模块:提供了 面向切面编程 实现,允许定义方法拦截器切入点 ,将代码按照功能进行分离以降低耦合性

ps :
SpringIOC( Inversion of Control ,控制反转 )和 AOP ( Aspect Oriented Programming ,面向切面编程 )为 内核

Aspects模块 (★★★)

Aspects模块:提供了与AspectJ集成功能AspectJ 是一个功能强大 且成熟的 面向切面编 程( AOP )框架

( Aspects 是一个AOP框架。)

Instrumentation模块

Instrumentation模块:提供了类工具支持类加载器的实现 ,可以在特定应用服务器中使用

Messaging模块

Messaging模块: Spring 4.0 以后新增的模块 ,它提供了对消息传递体系结构协议.

Test模块 (★★★)

Test模块:提供了对单元测试集成测试的支持

4.Spring的核心容器 :

  • Spring框架主要功能 是通过其核心容器来实现的。

  • Spring 框架 提供了两种核心容器 : ① BeanFactory容器ApplicationContext容器

  • 创建Spring容器 后,就可以获取Spring容器 中的BeanSpring获得Bean的实例 有以下 两种方法

    ① Object.getBean( String name)

    ② T getBean(Class requiredType)

4.1 BeanFactory 容器

  • BeanFactory 由org.springframework.beans.facytory.BeanFactory接口定义,是基础类型IOC容器,它提供了完整的loC服务支持
  • BeanFactory 就是一个 管理Bean的工厂, 它主要负责初始化 各种Bean ,并调用 它们的生命周期方法

4.2 ApplicationContext 容器

  • ApplicationContextBeanFactory子接口,也被称为 应用上下文,是另一种常用Spring核心容器
  • ApplicationContext 是org springframework.context.ApplicationContext 接口定义,不仅包含BeanFactory的所有功能 ,还添加了对国际化资源访问事件传播 等方面的支持
4.2.1 创建ApplicationContext 容器 的方式
通过 ClassPathXmlApplicationContext 创建
  • 通过 ClassPathXmlApplicationContext 创建 :
    ClassPathXmlApplicationContext 会从==类路径 classPath == 中寻找指定的XML配置文件 ,找到并装载完 成ApplicationContext实例化工作,其使用语法如下。

  • 通过 ClassPathXmlApplicationContext 创建 语法 为 :

    java 复制代码
    ApplicationContext applicationContext = 
    new ClassPathXmlApplicationContext (String configLocation);

    上述代码中,configLocation 参数用于指定Spring 配置文件名称位置 。如果其值为

    "applicationContext.xml ",则Spring 会去 类路径查找 名称为applicationContext.xml配置文件

通过 FileSystemXmlApplicationContext 创建
  • 通过 FileSystemXmlApplicationContext 创建 :
    FileSystemXmlApplicationContext 会从指定的文件系统路径 ( 绝对路径 )中寻找指定的XML
    配置文件 ,找到并装载完成 ApplicationContext的实例化工作

  • 通过 FileSystemXmlApplicationContext 创建 语法为 :

    java 复制代码
    ApplicationContext applicationContext = 
    new FileSystemXmlApplicationContext (String configLocation);

    ClassPathXmlApplicationContext 有所不同的是,FileSystemXmlApplicationContext 在读取Spring 的配置文件 时,不再从类路径 中读取配置文件,而是通过参数指定配置文件的位置 (通过绝对路径 来找),例如"D:/workspaces/applicationContext.xml" 。这种采用绝对路径的方式 ,会导致程序灵活性变差 ,所以 这个方法一般不推荐使用

通过 ContextLoaderListener 创建 (通过web.xml配置文件创建) (★★★常用)
  • Web项目 中,ApplicationContext容器的实例化 工作会交由Web服务器来完成Web服务器 实例化ApplicationContext 容器时,通常会使用基于 ContextLoaderListener 实现的方式,此种方式只需 要在web.xml中添加如下代码 :

    xml 复制代码
     <!--指定Spring配置文件的位置,多个配置文件时,以逗号分隔-->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <!-- Spring将加载spring目录下的applicationContext . xml文件-->
            <!--    classpath: 以类路径的方式加载    -->
            <param-value> classpath:spring/applicationContext.xm1</param-value>
        </context-param>
    
        <!-- 指定以ContextLoaderListener方式启动Spring容器-->
        <listener>
            <listener-class>
                org.springframework.web.context.ContextLoaderListener
            </listener-class>
        </listener>

    通过在web.xml配置 ApplicationContext相关信息Web服务器 会完成实例化的工作

  • 三大框架整合 以及项目 时,也将会基于ContextLoaderListener 的方式,由由Web服务器实例化ApplicationContext 容器 (web服务器来完成 ApplicationContext 容器的创建)。

4.2.2 获得Spring容器中Bean的方式 :

创建Spring容器 后,就可以获取Spring容器 中的BeanSpring获得Bean的实例 有以下 两种方法

  • Object .getBean ( String name):
    Object getBean (String name ) : 根据容器中Beanidname 来获取指定的Bean ,获取之后需要进行强制类型转
  • T getBean(Class requiredType): 根据 类的类型获取Bean 的实例。由于此方法为泛型方法 ,因此在获取Bean之后不需要进行强制类型转换
相关推荐
曾令胜2 小时前
excel导出使用arthas动态追踪方法调用耗时后性能优化的过程
spring·性能优化·excel
.格子衫.2 小时前
Spring Boot 原理篇
java·spring boot·后端
多云几多2 小时前
Yudao单体项目 springboot Admin安全验证开启
java·spring boot·spring·springbootadmin
摇滚侠4 小时前
Spring Boot 3零基础教程,Spring Intializer,笔记05
spring boot·笔记·spring
Jabes.yang5 小时前
Java求职面试实战:从Spring Boot到微服务架构的技术探讨
java·数据库·spring boot·微服务·面试·消息队列·互联网大厂
聪明的笨猪猪5 小时前
Java Redis “高可用 — 主从复制”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
兮动人5 小时前
Spring Bean耗时分析工具
java·后端·spring·bean耗时分析工具
MESSIR225 小时前
Spring IOC(控制反转)中常用注解
java·spring
摇滚侠5 小时前
Spring Boot 3零基础教程,Demo小结,笔记04
java·spring boot·笔记
华洛5 小时前
公开一个AI产品的商业逻辑与设计方案——AI带来的涂色卡自由
前端·后端·产品