1.初识Spring

本章目标

  1. Spring出现的背景(了解)
  2. Spring的ioc容器(理解)
  3. 搭建Spring环境(掌握)

本章内容

什么是框架:JAVA框架是一些类和接口的集合,通过这些接口协调,运用各种设计模式来完成一系列的程序实现,框架又叫做开发中的半成品,它不能提供整个WEB应用程序的所有东西,但是有了框架,我们就可以集中精力进行业务逻辑的开发,而不用去关心它的技术实现以及一些辅助的业务逻辑。

框架就是某些个人或者组织定义了一系列的类或者接口,提前定义好了一些实现,用户可以在这些类和接口的基础之上,使用这些类来迅速的形成某个领域或者某个行业的解决方案,简化开发的过程,提高开发的效率

java技术框架发展史

Struts1是全世界第一个发布的MVC框架,它由Craig McClanahan在2001年发布

框架该怎么学?开始跟着把项目搭建起来,无须过多关于低层原理,当对框架有一定认知了之后,有兴趣可以研究一下部分源码

一、Spring简介

经过多年的框架发展,Spring 框架体系一统江湖,让我们java程序员只需要关注Spring 体系的发展即可,无需象前端开发者要学个个不同的框架。

Spring是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring是于2003 年兴起的一个轻量级的Java 开发框架,2004年发布第一个版本,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EE full-stack(一栈式) 轻量级开源框架,核心是解耦

官网:https://spring.io/

1、作者简介

Rod Johnson(罗宾·约翰逊)–Java世界的传奇大师,神级人物;Spring FrameWork的缔造者;旷世奇书”葵花宝典”《Expert one on one J2EE Design and Development》作者;Servlet2.4和JDO2.0的规范专家;Java Development Community杰出人物。

Rod在Java领域的影响已经远远超越了Spring本身的范畴.《Expert One-on-One J2EE Design and Development》真正地改变了Java世界,引起了人们对J2EE的反思。

“不会音乐的金融顾问不是好程序员”是对这位大神最好的称呼。Rod Johnson在成为码农之前是悉尼大学的博士–音乐学博士。

  • SpringFramework创始人, interface21 CEO
  • 丰富的c/c++背景,丰富的金融行业背景
  • 1996年开始关注Java服务器端技术
  • Servlet2.4和JDO2.0专家组成员
  • 2002年著写《Expoert one-on-oneJ2EE设计与开发》
  • ……

2、Spring生态圈

做Java开发的人一提起Spring,首先在脑海中浮现出的就是“IoC”,“AOP”,“Spring MVC”,“Spring Security”等等这些名词,甚至大有“无Spring不Java”的感慨。

实际上,时至今日Spring已不再是一个简单的编程框架了,从最初的“SSH框架”发展到今天,Struts和Hibernate都几乎快要从程序员视野中消失了,而Spring却发展成了一个非常庞大且完整的生态。

所以说,除非特别指明是Spring生态中的某个具体框架,否则提起“Spring”应该指的是整个Spring生态。

说句不夸张的话,Java程序员只要精通了Spring,也就掌握了Java开发的精髓。 在整个Spring生态中包含了许多应用在特定场景的具体框架,如:“Spring Framework”,“Spring Security”,“Spring Boot”,“Spring Cloud”等等,其中“Spring Framework”框架是整个生态的核心基础,其他框架都需要依赖“Spring Framework”提供的基础功能,而且每个框架都有自己独立的代码仓库。

主要项目

3、Spring Framework

Spring Framework项目是整个Spring生态的基础,包含了Spring最核心的功能,如:IoC,AOP,Spring MVC等,其他项目都需要依赖Spring Framework。 Spring Framework项目又包含多个子模块,如:spring-core,spring-beans,spring-context,spring-aop,spring-web,spring-webmvc等等。实际上,Spring Framework项目是一个模块化的架构,各模块之间又存在依赖关系。

以下Spring Framework统一简称为 Spring

4、Spring的模块组成

主要构成: 依赖注入容器,AOP实现, DAO/ORM支持,Web集成

  • Core 封装包:框架的最基础部分,提供IoC和依赖注入特性。这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正地允许你从程序逻辑中分离出依赖关系和配置。
  • DAO 提供了JDBC的抽象层,它可消除冗长的JDBC编码和解析数据库厂商特有的错误代码。 并且,JDBC 封装包还提供了一种比编程性更好的声明性事务管理方法,不仅仅是实现了特定接口,而且对所有的POJOs(plain old Java objects)都适用。
  • ORM 封装包提供了常用的“对象/关系”映射APIs的集成层。 利用ORM封装包,可以混合使用所有Spring提供的特性进行“对象/关系”映射,如前边提到的简单声明性事务管理。
  • Spring的 AOP 封装包提供了符合 AOP Alliance规范的面向方面的编程(aspect-oriented programming)实现。
  • Spring中的 Web 包提供了基础的针对Web开发的集成特性,当与WebWork或Struts一起使用Spring时,这个包使Spring可与其他框架结合。
  • Spring中的 MVC 封装包提供了Web应用的Model-View-Controller(MVC)实现。Spring的MVC框架提供了一种清晰的 分离模型,在领域模型代码和web form之间。并且还可以借助Spring框架的其他特性。

课堂提问:Spring的是否适用于小型项目?

Spring框架的核心部分就是IOC

5、相关名词

  • Bean:在Spring容器管理之下的所有功能组件都称之为Bean
  • BeanFactory:负责创建并维护Bean实例,是Spring控制反转容器的实际代表,根据配置文件管理Bean以及相互之间的依赖关系,可以配置的项目主要有:
    • Bean的属性以及依赖关系(对其他Bean的引用)
    • Bean的创建模式(是否为单例模式)
  • BeanWarpper:与BeanFactory协作,负责利用反射机制以及Java Bean规范负责单个Bean的属性设定
  • ApplicationContext:是BeanFactory的扩展,功能得到了进一步增强,比如更易与Spring AOP集成、消息资源处理(国际化处理)、事件传递及各种不同应用层的context实现

二、搭建第一个Spring项目

1、pom依赖如下

    <properties>
        <spring.version>5.3.10</spring.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>

2、在src-config.xml

ioc容器根据配置文件,xsd文件的应用整体的作用是对当前配置的文件的格式做了限制

 <?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="..." class="...">
         <!-- collaborators and configuration for this bean go here -->
     </bean>
 
     <bean id="..." class="...">
         <!-- collaborators and configuration for this bean go here -->
     </bean>
 
     <!-- more bean definitions go here -->
 
 </beans>

此文档也可从官网找到

3、测试类

使用Spring的方式来实现解耦,基于前面的工厂模式

 package com.woniuxy;
 
 import com.woniuxy.service.IFruit;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 public class App {
     public static void main(String[] args) {
         ApplicationContext ac = new ClassPathXmlApplicationContext("spring-config.xml");
         IFruit fruit = ac.getBean("apple",IFruit.class);
         fruit.eat();
     }
 }

4、IoC (重点+难点)

目标:降低耦合性

ioc思想的建立需要一个过程,不是一两句话就能明白的,需要后面通过案例反复实践才能体会去思想

控制反转(Inversion of Control,IoC):指的是将传统编程方式中的程序依赖关系的控制权从程序内部转移到程序外部,允许程序员从程序逻辑中分离出对具体实现的依赖和管理。

  • 控制反转也体现了“面向接口编程”、分离调用与实现的设计思想。
  • 依赖注入:由容器动态的将某种依赖关系注入到组件之间

Spring框架的核心是IOC容器(DI,控制反转容器),目的是提供一个高扩展性、组件化以及无侵入代码(即在程序代码中不涉及Spring框架的专有类及接口,就可以置于容器管理之下)的应用开发框架。

使用对象时,由主动new产生对象转换成,从外部提供对象,在这个过程中,对象的创建控制权由程序转移到外部,此思想称为控制反转。

5、BeanFactory和ApplicationContext(了解)

相关接口和类的结构图

BeanFactory:

BeanFactory是IOC容器的顶级接口,是IOC容器的最基础实现,也是访问spring容器的根接口,负责对bean的创建,访问等工作。实现类功能比较单一,BeanFactory接口实现的容器,特点是每次获取对象时才会创建对象(Bean实例延迟到第一次获取时加载)。

ApplicationContext:

应用上下文,继承BeanFactory接口,它是Spring的一各更高级的容器,提供了更多的有用的功能;

  1. 国际化(MessageSource)
  2. 访问资源,如URL和文件(ResourceLoader)
  3. 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层
  4. 消息发送、响应机制(ApplicationEventPublisher)
  5. AOP(拦截器)

6、Spring 框架使用的设计模式(了解)

1、简单工厂:

BeanFactory:Spring的BeanFactory充当工厂,负责根据配置信息创建Bean实例。它是一种工厂模式的应用,根据指定的类名或ID创建Bean对象。

2、工厂方法:

FactoryBean:FactoryBean接口允许用户自定义Bean的创建逻辑,实现了工厂方法模式。开发人员可以使用FactoryBean来创建复杂的Bean实例。

3、单例模式:

Bean实例:Spring默认将Bean配置为单例,确保在容器中只有一个共享的实例,这有助于节省资源和提高性能。

4、适配器模式:

SpringMVC中的HandlerAdapter:SpringMVC的HandlerAdapter允许不同类型的处理器适配到处理器接口,以实现统一的处理器调用。这是适配器模式的应用。

5、装饰器模式:

BeanWrapper:Spring的BeanWrapper允许在不修改原始Bean类的情况下添加额外的功能,这是装饰器模式的实际应用。

6、代理模式:

AOP底层:Spring的AOP(面向切面编程)底层通过代理模式来实现切面功能,包括JDK动态代理和CGLIB代理。

7、观察者模式:

Spring的事件监听:Spring的事件监听机制是观察者模式的应用,它允许组件监听和响应特定类型的事件,实现了松耦合的组件通信。

8、策略模式:

excludeFilters、includeFilters:Spring允许使用策略模式来定义包扫描时的过滤策略,如在@ComponentScan注解中使用的excludeFilters和includeFilters。

9、模板方法模式:

Spring几乎所有的外接扩展:Spring框架的许多模块和外部扩展都采用模板方法模式,例如JdbcTemplate、HibernateTemplate等。

10、责任链模式:

AOP的方法调用:Spring AOP通过责任链模式实现通知(Advice)的调用,确保通知按顺序执行。

posted @ 2025-04-21 17:35  icui4cu  阅读(12)  评论(0)    收藏  举报