从0开始学Spring(我奶奶也能学会的Spring)

一、前言

提到Spring相比作为Java开发的你一定不会陌生。Spring的出现大大的简化了Java的开发,现如今更是流行Springboot、SpringCloud,作为Spring庞大家族的一部分,伴随着微服务的兴起而流行。当我们在感叹SpringBoot为我们编程带来便利的同时,我们更应该知道Springboot是基于Spring,可以说掌握了Spring对于其他衍生技术的学习都是有很大的好处。所以笔者想从头在学一遍Spring,正所谓读书百遍其义自见。当然啦受限于工作年限和技术水平,文章中肯定会有一些错误,还希望大家能够指出。废话不多讲,让我们开始Spring的学习。

二、框架学习=官网+源码

曾经我的一位老师和我说,学习一个框架要从官网开始然后逐步熟练使用,再学习源码。现在看来是很有道理的,所以我们从官网开始。Spring官网
tips:本系列采用的是当前稳定版本5.3.22

1、什么是Spring

Spring框架为现代基于java的企业应用程序——在任何类型的部署平台上——提供了全面的编程和配置模型。Spring的一个关键元素是应用程序级别的基础设施支持:Spring关注企业应用程序的“管道”,以便团队可以专注于应用程序级别的业务逻辑,而无需与特定的部署环境建立不必要的联系。

2、Spring可以做什么

image.png
(1)可以快速搭建微服务
(2)构建响应式程序
(3)云服务
(4)web app等等

3、Spring核心模块

image.png
这张图摘自网上,这里有个大概的了解即可之后会对每个模块进行分析。

三、Spring初体验

这里我们使用Maven来构建第一个Spring项目。

1、POM文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.cmxy</groupId>
  <artifactId>learn-spring</artifactId>
  <version>1.0-SNAPSHOT</version>

  <properties>
    <maven.compiler.source>12</maven.compiler.source>
    <maven.compiler.target>12</maven.compiler.target>
  </properties>

  <dependencies>
    <!-- Spring核心依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.3.22</version>
    </dependency>

    <!-- 单元测试:非必需-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!--Lombok插件,用于生成get/set 非必需-->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.22</version>
    </dependency>

  </dependencies>

</project>

2、Spring配置文件

<?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 id="people" class="com.cmxy.entity.People">
        <property name="name" value="hardy"/>
        <property name="age" value="27"/>
    </bean>

</beans>

3、测试代码

(1)实体类

@Data
    public class People {

        private String name;

        private Integer age;
    }

(2)Main函数

public class Application {

    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        People people = (People)context.getBean("people");
        System.out.println(people);
    }
}

(3)结果
image.png

四、核心概念一:IOC容器(简介)

从上面的事例代码引出Spring的第一个核心概念IOC容器,下面我们看看官方是怎么介绍IOC容器的。

1、官网原文

This chapter covers the Spring Framework implementation of the Inversion of Control (IoC) principle. IoC is also known as dependency injection (DI). It is a process whereby objects define their dependencies (that is, the other objects they work with) only through constructor arguments, arguments to a factory method, or properties that are set on the object instance after it is constructed or returned from a factory method. The container then injects those dependencies when it creates the bean. This process is fundamentally the inverse (hence the name, Inversion of Control) of the bean itself controlling the instantiation or location of its dependencies by using direct construction of classes or a mechanism such as the Service Locator pattern.

译文:
本章介绍了控制反转(IoC)原理的Spring框架实现。IoC也被称为依赖注入(DI)。在此过程中,对象仅通过构造函数参数、工厂方法的参数或在对象实例构造或从工厂方法返回后在对象实例上设置的属性来定义它们的依赖关系(即它们工作的其他对象)。然后容器在创建bean时注入这些依赖项。这个过程从根本上说是bean本身的逆过程(因此得名“控制反转”),它通过使用类的直接构造或服务定位器模式等机制来控制依赖项的实例化或位置。

2、IOC介绍

Ioc全称Inversion of Control,控制反转。所谓的控制反转就是将控制权交给第三方。以上面创建Person代码为例,在不实用Spring的情况下我们通常会这么做 Person p = new Person();而当我们使用上Spring后这一过程就交由Spring来处理,我们只需要在配置文件上定义好属性,至于如何创建对象我们并不需要知道。
或许你会对这个过程有所疑问,认为这个过程并没有什么意义反而增加了复杂的。要知道任何技术的出现都是为了解决问题。随着我们项目越来越复杂,各种类之间的关系错综复杂,或者我们要创建非常复杂的对象的时候IOC的好处就体现了。利用IOC我们可以降低系统的耦合度,减少重复代码的开发。
上文中还提到了一个概念**DI,**所谓的DI指的是Dependency Inject(依赖注入),那么IOC和DI又有什么关系呢?这里就有一句非常经典的话:IOC是思想DI是实现。即IOC提出了控制反转这一思想,而通过DI来实现了这一想法。

3、IOC容器的数据结构

我们知道程序=算法+数据结构,框架本身也是一个程序那么其核心对象也一定是有特定的数据结构。从上述代码中我们可以看出,当我们想要获取在配置文件中定义的对象时我们会这么写
People people = (People)context.getBean(“people”);
是不是有点类似于我们经常使用的Map接口,通过key去获取Value,所以我们不放大胆的猜测一下Spring中的核心对象之一的IOC容器底层采用的是Map的结构。(之后的文章会结合源码进行分析,这里有个大概的印象)
我们注意到在官网的参考文档里有这么一句话

The org.springframework.beans and org.springframework.context packages are the basis for Spring Framework’s IoC container. The BeanFactory interface provides an advanced configuration mechanism capable of managing any type of object. ApplicationContext is a sub-interface of BeanFactory

译文: bean和org.springframework.context包是Spring框架IoC容器的基础。 BeanFactory接口提供了一种高级的配置机制,能够管理任何类型的对象。 ApplicationContext是BeanFactory的子接口 。
image.png
可以看到beanFactory有非常多的实现类,其中就包含我们刚才使用的ApplicationContext。这里给出第一个结论:BeanFacotry是Spring最底层的IOC容器,BeanFactory是一接口,有非常多的实现。Spring通过一系列的容器(工厂)来拓展功能,我们所使用的ApplicationContext就是一个高级的容器(工厂)

五、核心概念二:Bean

刚才提到了BeanFactory是Spring中最基础的IOC容器,BeanFacotry中定义了一些操作bean的基本方法。这里我们反复提到了bean,那么什么是Bean呢?简单的说Bean就是对象,是一些被Spring所管理的对象。例如本例子中的Person就一个被Spring管理的Bean。
image.png
在Spring中如果我们需要定一个Bean,通常是在xml里配置对应的bean节点,例如这样
image.png
官网中是这样描述的:Spring IoC容器管理一个或多个bean。这些bean是用您提供给容器的配置元数据创建的(例如,以XML 定义的形式)。在容器本身内部,这些bean定义被表示为BeanDefinition对象,它包含(包括其他信息)以下元数据:

A Spring IoC container manages one or more beans. These beans are created with the configuration metadata that you supply to the container (for example, in the form of XML definitions).
Within the container itself, these bean definitions are represented as BeanDefinition objects, which contain (among other information) the following metadata:

这里又得出一个结论:在Spring中所谓的Bean就是一系列被Spring所管理的对象,而在IOC容器内部这些对象会被封装为BeanDefinition对象。

六、结束语

今天我们简单的了解了一下Spring,并介绍了其中两个比较重要的概念,IOC容器和Bean。接下来的文会一步步结合官网+源码来学习Spring,希望对你有所帮助。

未完待续


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习如何使用Spring Security可以按照以下步骤开始: 1. 熟悉Spring框架和基本的Web开发知识:在学习Spring Security之前,建议先对Spring框架有一定的了解,并熟悉基本的Web开发概念和技术,如HTTP、Servlet、Filter等。 2. 阅读Spring Security文档:官方文档是学习Spring Security的最佳资源。您可以访问Spring Security的官方网站(https://spring.io/projects/spring-security)并查找相关文档和教程。文档包括详细的指南、示例代码和常见问题解答,可以帮助您了解Spring Security的核心概念和用法。 3. 添加Spring Security依赖:在您的Spring项目中添加Spring Security的依赖项。您可以通过Maven或Gradle构建工具来管理依赖关系。在项目的pom.xml(或build.gradle)文件中添加Spring Security相关的依赖项。 4. 配置Spring Security:根据您的需求,配置Spring Security以实现所需的安全功能。您可以通过XML配置或Java配置来完成配置。配置包括定义用户身份验证方式、访问控制规则、安全过滤器链等。 5. 编写用户认证逻辑:实现用户认证逻辑,例如通过数据库、LDAP、OAuth等方式验证用户身份。您可以使用Spring Security提供的认证机制,也可以自定义认证逻辑。 6. 定义访问控制规则:根据您的需求,定义访问控制规则以限制用户对受保护资源的访问。您可以使用Spring Security提供的注解、表达式或配置文件来定义规则。 7. 测试和调试:编写测试用例来验证您的安全配置是否按预期工作。确保您的应用程序在身份验证和授权方面具有预期的行为,并及时修复可能出现的问题。 8. 深入学习和实践:一旦您掌握了基本的Spring Security用法,您可以进一步学习更高级和复杂的功能,如单点登录(SSO)、OAuth认证、记住我功能等。通过不断实践和深入学习,您可以更好地应用Spring Security到实际项目中。 记住,学习Spring Security需要时间和实践,因此保持耐心并持续探索。祝您学习愉快!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值