Spring (Spring Framework)的学习

 官网 : http://spring.io/

一、什么是Spring

        Spring是一个开源的Java应用程序框架,用于构建企业级应用程序。它提供了一种轻量级的开发方式,通过依赖注入(Dependency Injection)、面向切面编程(Aspect-Oriented Programming)和控制反转(Inversion of Control,IoC)等特性,简化了Java应用程序的开发过程。

Spring Framework特点:

  • Spring是一个开源免费的框架 , 容器 .
  • Spring是一个轻量级的框架 , 非侵入式的 .
  • 控制反转 IoC , 面向切面 Aop
  • 对事物的支持 , 对框架的支持

总而言之:Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)

1、依赖注入

        依赖注入(Dependency Injection):通过依赖注入,Spring框架可以管理应用程序中的对象依赖关系,将对象的创建和依赖关系的维护交给框架处理,降低了组件之间的耦合性,提高了代码的可维护性和可测试性。

2、面向切面编程

        面向切面编程(Aspect-Oriented Programming):Spring框架支持面向切面编程,可以通过配置方式将横切关注点(如日志记录、事务管理等)与业务逻辑分离,提高了代码的模块化和可重用性。

3、控制反转

控制反转(Inversion of Control,IoC)它是一种设计原则,通过将对象的创建和依赖关系的管理交给容器来实现,而不是由应用程序自己来创建和管理对象。

在传统的应用程序中,对象之间的依赖关系通常由对象自身来管理和创建。例如,一个对象需要依赖另一个对象时,它通常会直接创建和管理被依赖的对象。

而控制反转则将这种依赖关系的管理转移到了容器中,应用程序只需要描述对象之间的依赖关系,而不需要直接创建和管理对象。容器负责创建对象,并将依赖关系注入到相应的对象中。

二、Spring的组成

Spring框架由以下7个定义良好的模块组成:

1、Spring Core

        Spring核心模块,提供了依赖注入(DI)和控制反转(IoC)功能,是整个Spring框架的基础。

2、Spring Context

        建立在Spring Core之上,提供了高级功能,如国际化、事件传播、资源加载和应用程序层面的上下文管理。

3、Spring AOP

        Spring面向切面编程(AOP)模块,提供了在应用程序中实现面向切面编程的支持,通过配置方式实现横切关注点的模块化和重用。

4、Spring JDBC

        Spring JDBC模块,提供了对JDBC的封装和简化,使得数据库访问更加方便和高效。

5、Spring ORM

        Spring对象关系映射(ORM)模块,提供了对各种ORM框架(如Hibernate、MyBatis等)的集成支持,简化了数据库操作和数据访问的开发。

6、Spring Web

        Spring Web模块,提供了构建Web应用程序的支持,包括基于Servlet的Web框架、RESTful Web服务、WebSocket等。

7、Spring Test

        Spring测试模块,提供了对Spring应用程序进行单元测试和集成测试的支持,包括模拟对象、测试上下文等。

这些模块共同构成了Spring框架的分层架构,每个模块都有特定的功能和用途,可以根据需要选择和集成相应的模块来开发应用程序。

三、Spring开发环境的搭建

本次学习的是Spring 6.0+的版本,需要的jdk版本为17+以上。

1、多个jdk版本的安装与切换

首先在官网下载jdk17和jdk8

官方网址Java Software | Oracle

下载好以后,进行环境变量的配置,当前我电脑下载了两个版本的jdk分别是jdk8和jdk17

点击新建添加下面三个系统变量进行规范命名

JAVA_HOME+jdk版本

其中的的JAVA_HOME变量进行当前使用jdk版本的选择 ,它的值的写法为(以我选择的jdk17为例子)

%JAVA_HOME17%

再次点击新建

变量名:CLASSPATH   

变量值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

 然后找到Path 点击编辑

添加一个(.)

再添加(%JAVA_HOME%\bin)

需要注意的点:

在Path变量中,如果存在javapath这个路径需要将%JAVA-HOME%\bin的位置提前至javapath路径之前。如果没有提前,则不能成功切换jdk版本时

 

在cmd命令控制台输入下面的指令即可查看是否切换成功

 java -version 

2、maven版本3.6以上 

        这里的maven需要进行淘宝镜像等配置,自行学习,这里不做过多细说。

四、第一个Spring入门案例的搭建

(这里使用的软件是idea2023+版本进行开发)

大致的搭建流程

1、首先搭建一个父级的maven工程 

可以把项目的src和.gitignore删除 

2、选中项目进行添加新的模块,也就是我们的子工程

我们给他取名为spring-first, 选中我们的父项为Spring6

3、在spring-first的pom.xml文件中添加下面的依赖

<dependencies>
<!--spring context依赖-->
<!--当你引入Spring Context依赖之后,表示将spring的基础依赖引入了-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>6.0.2</version>
    </dependency>
<!--junit5测试-->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.3.1</version>
    </dependency>
</dependencies>

4、在下面的路径中添加一个User类 ,进行一个简单的方法的添加,以及Test类方便后续的测试

5、 按照下面的方法在resources中添加一个spring的是=配置文件,我们命名为bean.xml

在bean.xml中的beans标签内添加下面的配置

    <bean id="user" class="org.example.User"></bean>

 <!-- 完成user对象创建-->

<!-- bean标签-->

<!-- id属性:唯一标识 (以类的小写命名)-->

<!-- class.属性:要创建对象所在类的全路径(包名称+类名称)-->

6、在Test类中进行测试

package org.example;

import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestUser {

@Test
    public void testUser() {

//加载spring配置文件,对象创建
    ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");

//获取创建的对象
    User user =(User)context.getBean("user");
    System.out.println(user);

//使用对象调用方法进行测试
    user.add();

    }
}

运行之后的效果,org.example.User@19d481b就是我们通过配置文件创建的对象,所存储在容器中的地址

 

7、不使用new创建对象方法的逻辑分析

上述不使用new创建对象的方法,底层逻辑是使用了反射创建对象

1、加载bean.xml配置文件


2、对xml文件进行解析操作


3、获取xml文件bean标签属性值、id属性值和class属性值

4、使用反射根据类全路径创建对象,代码如下所示

  //通过反射创建对象
@Test
public void testUser02() throws Exception {
  //1、获取类的Class对象
    Class cu=Class.forName("org.example.User");

   //2、调用方法创建对象

    User u= (User) cu.getDeclaredConstructor().newInstance();
    System.out.println(u);

}

 5、存储对象的容器是在DefaultListableBeanFactory内的map集合内,以键值对的形式存储

key:唯一标识
value:类的定义(描述信息)

  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值