Spring 对于 Java 程序员可以说至关重要,因此我把自己学习此框架的笔记进行了整理,写成简洁易懂保姆级专栏,文章会不断修补完善,有喜欢的小伙伴可以订阅学习呀,如果觉得文章写的不错,三联支持可怜的博主呀 ⭐🌟

Spring从入门到精通【一】-LMLPHP

1. 写在前面

大家好,本文是Spring的第一篇,理论方面,学习框架相关概念,实践方面,完成第一个环境的搭建。

2. 引言

致力于JAVAEE轻量级解决方案,相对于原来学过的框架而言,Spring不是替换某个框架,而是对其进行整合管理

轻量级方案 提供简单的,统一的,高效的方式构造整个应用,并且可以将单层框架以最佳的组合揉和在一起建立一个连贯的体系。

3. Spring核心作用

Spring 框架用来管理 [创建 | 使用 | 销毁] 项目中的组件,由于Spring框架可以帮我们创建管理项目中的组件对象,因此也习惯称Spring是一个工厂或容器

组件: dao,service都是项目中的组件

4. 第一个环境搭建

4.1 新建空项目

新建项目,选择空项目,下一步

Spring从入门到精通【一】-LMLPHP

填写项目名Spring,选择自己的项目目录,点击完成

Spring从入门到精通【一】-LMLPHP

4.2 新建Maven模块

创建Maven模块前,先检查Maven配置是不是已经OK,点开设置,搜索Maven查看

Spring从入门到精通【一】-LMLPHP

打开项目结构,新建模块

Spring从入门到精通【一】-LMLPHP

选择Maven模块,换了个主题,继续,哈哈

Spring从入门到精通【一】-LMLPHP
填写项目名,项目存放位置,组Id,工件名和版本号一般不修改,点击完成
Spring从入门到精通【一】-LMLPHP

4.3 引入依赖

Maven项目就创建好了,然后再Pom.xml中引入Spring应用相关依赖包,依赖坐标如下:

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.3.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.3.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>4.3.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-expression</artifactId>
        <version>4.3.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>4.3.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.3.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>4.3.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>4.3.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.3.2.RELEASE</version>
    </dependency>
</dependencies>

因为本地仓库没有这些依赖,所以需要刷新Maven仓库,去自己配置的国内镜像站下载相应依赖包,稍等就会下载完成,就不报红了

什么是依赖,说的简单点就是Java代码包,里面有很多的Java类,Spring需要运行,需要这些代码支持,所以把它们成为依赖

4.4 引入配置文件

名称任意,位置项目包下的任意位置,习惯叫做application.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 http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

4.5 创建组件类

在Java目录下新建一个dao包,用于存放与数据库映射的Java实体类User,User内容如下:

package dao;

public class User {
    private int id;
    private String name;

    public User() {
    }

    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

4.6 Spring工厂管理

现在把dao层下的User类,告诉并交给Spring,打开application.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 http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--通过bean标签管理组件对象-->
    <bean id="User" class="dao.User" scope="prototype"/>

</beans>

4.7 启动工厂测试

和dao同级,创建一个启动类MainApplication ,注释看代码

import dao.User;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApplication {
    public static void main(String[] args) {
        // 定义一个ClassPathXmlApplicationContext类型的变量
        ClassPathXmlApplicationContext context;
        // 通过创建ClassPathXmlApplicationContext对象,参数为配置文件xml名
        // 这个类在org.springframework.context.support包下
        context = new ClassPathXmlApplicationContext("application.xml");
        // context事实上就是Spring容器了,现在你可以通过容器暴露的getBean()方法
        // 参数为配置文件中的id唯一标志,获取实例对象
        User user = (User) context.getBean("User");
        User user1 = (User) context.getBean("User");
        System.out.println(user);
        System.out.println(user1);
        // 因为配置的是prototype多例,所以两次创建了两个是不同对象,返回false
        // scope默认值是singleton,单例,如果不配置scope,这里结果就是true了
        System.out.println(user == user1);
    }
}

执行结果:

七月 07, 2022 5:09:03 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@6433a2: startup date [Thu Jul 07 17:09:03 CST 2022]; root of context hierarchy
七月 07, 2022 5:09:03 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [application.xml]
User{id=0, name='null'}
User{id=0, name='null'}
false

进程已结束,退出代码为 0

5. Spring框架核心思想

每个框架都有自己的核心思想,要解决哪些问题,这些很重要无论是对框架本身还是对于学习框架的开发者来说,下面就了解Spring框架有哪些核心思想,为以后的学习打牢基础。

5.1 控制反转 IoC

IoC(inversion of controll) 控制反转

把对象的创建由原来(new)的方式转移到配置文件中,交给spring工厂来创建对象,这就是控制反转,所以说Spring是一个大工厂,也是没问题的。

5.2 依赖注入DI

DI(dependcy Injection) 依赖注入

Spring不仅要创建对象,还要建立类与类之间的关系,因此在控制反转的基础上又提出了依赖注入的概念。

比如业务层需要数据访问层,就可以说业务依赖数据访问,既然依赖,那就要把数据访问给到业务,这里用了一个词,叫注入,很形象。

5.3 面向切面编程AOP

AOP( Aspect Oriental Programing ) 面向切面的编程

通过预编译和运行期间动态代理实现程序功能的统一维护的一种技术,AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个核心概念,利用AOP可以对业务逻辑的各个部分进行隔离,比如事务操作,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

6. 写在最后

本文学习了Spring的相关概念并完成了第一个环境的搭建运行,理解了Spring框架的核心点,比如IoCDIAOP,相信你对Spring有了初步的认识,Spring是一个大工厂,我们需要就问它要,而且它还不仅仅是大工厂,还有一些其他的特点等你深入学习。

我是小周,周棋洛的周,原创不易,如果觉得文章对你有帮助,不妨点赞收藏一下本文呀,那会让博主很开心的,如果想持续学习Spring,点个关注不迷路,这就是全部内容了,拜拜,下期再见。👋

Spring从入门到精通【一】-LMLPHP

07-09 09:38