2022-01-23-Spring学习step001

学习B站江南一点雨的Spring视频。

以下内容我是我照着视频敲的,仅用于我个人学习。一切权利归江南一点雨所有。

String开篇:www.javaboy.org 江南一点雨个人网站

1. Spring简介:

我们通常说的Spring指的是Spring Framework,Spring Framework是Spring家族的一个分支而已。Spring家族包括很多例如:Spring Boot、Spring Framework、Spring Cloud Data、Spring Session、Spring Batch、Spring Security、Spring Cloud。其中Spring Framework是Spring家族的一个根基。

Spring是为了解决企业级应用开发的复杂性而创建的。在Spring之前,有一个重量级的工具叫EJB。

在Spring中一般常说的DI就是依赖注入,EJB中实际也提供了,其实呢你会发现Spring它本身也是一个重复造轮子的产物,但是轮子你如果造的好的话呢,前途不可限量,有的人鼓吹不要重复造轮子,如果我是轮子发明者,我肯定告诉你不要重复造轮子,用我的轮子就行了,如果我不是轮子的发明者的话,这句话我会将信将疑。

Spring中两个重要的功能,一个就是IOC。IOC实际上在JavaEE里面是有提供的,在JavaEE里它有一个JNDI,Java Naming and Directory Interface,Java命名和目录接口。实际上呢,这个IOC和JNDI有一定的相似性。Spring Framework相当于一定程度上颠覆了JavaEE最早的开发模式,以前讲JavaEE开发有JavaEE标准,现在呢,主要是用Spring提供的这一套方案来操作。

Spring的优点例如:可以对事务进行抽象,统一的数据库事务、分布式事务等等,还有面向切面的编程,让事务的操作变的非常的简单。另外一个就是Spring Framework里面另外一个,Spring MVC,让整个Spring家族整体框架达到了新的巅峰,我们现在开发RESTful接口或者普通的后台应用,Spring MVC是一个非常常用的选择。

从4个方面来讲解Spring:

  • IoC/DI
  • AOP
  • 事务
  • JdbcTemplate

2. Spring下载:使用Maven添加Spring。

3.1 IoC:

3.1.1 Ioc概念:IoC(Inversion of Control),中文叫做控制反转。这是一个概念,也是一个思想。控制反转,实际上就是指对一个对象的控制权的反转。例如,如下代码:

class class Book {
    private Integer id;
    private String name;
    private Double price;
    // 省略getter/setter
}

public class User {
    private Integer id;
    private String name;
    private Integer age;

    public void doSth() {
        Book book = new Book();
        book.setId(1);
        book.setName("故事新编");
        book.setPrice((double) 20);
    }
}

在这种情况下,Book对象的控制权在User对象里边,这样,Book和User高度耦合,如果在其他对象中需要使用Book对象,得重新创建,也就是说,对象的创建、初始化、销毁等操作,统统都要开发者自己来完成。如果能够将这些操作交给容器来管理,开发者就可以极大的从对象的创建中解脱出来。

使用Spring之后,我们可以将对象的创建、初始化、销毁等操作交给Spring容器来管理。就是说,在项目启动时,所有的Bean都将自己注册到Spring容器中去(如果有必要的话),然后如果其他Bean需要使用到这个Bean,则不需要自己去new,而是直接去Spring容器去要。

3.1.2 IoC初体验:

idea创建Maven项目,引入spring-context依赖:

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>
    </dependencies>

在resource目录下创建一个Spring的配置文件,applicationContext.xml,在这个文件中,我们可以配置所有需要注册到Spring容器的Bean:

<?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 class="org.javaboy.ioc.model.User" id="user"/>
</beans>

class属性表示需要注册的bean的全路径,id则表示bean的唯一标识,也可以以name作为bean的标识,在超过99%的情况下,id和name其实是一样的,特殊情况下不一样。

接下来,下面的main方法中,加载这个配置文件:

package org.javaboy.ioc;

import org.javaboy.ioc.model.User;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

/**
 * @author konglc
 * @date 2022/1/23 15:17
 */
public class Main {
    public static void main(String[] args) {
//        User user = new User();
//        System.out.println("user = " + user);
//        FileSystemXmlApplicationContext ctx = new FileSystemXmlApplicationContext("E:\\study\\Spring\\code\\ioc01\\src\\main\\resources\\applicationContext.xml");
        ClassPathXmlApplicationContext ctx =  new ClassPathXmlApplicationContext("applicationContext.xml");
        User u1 = (User) ctx.getBean("user");
        User u2 = ctx.getBean("user",User.class);
        User u3 = ctx.getBean(User.class);
        System.out.println("u1 = " + u1);
        System.out.println("u2 = " + u2);
        System.out.println("u3 = " + u3);
    }
}

执行main方法,配置文件就会被自动加载,进而在Spring中初始化一个User实例。此时,我们显示的指定User类的无参构造方法,并在无参构造方法中打印日志,可以看到无参构造方法执行了,进而证明对象已经在Spring容器中初始化了。

最后,通过getBean方法,可以从容器中去获取对象。

在idea中鼠标放在类上,按CTRL+H,展示该类的继承关系。

在idea中在文件上右击选择Copy Path/Absolute Path,可直接得到绝对路径。

基本属性注入:

属性注入:

  • 属性注入:基本数据类型
  • 复杂属性注入:对象注入、数组注入、Map注入、Properties注入

进行到P06的01:01。

posted on 2022-01-23 20:57  平凡力量  阅读(46)  评论(0编辑  收藏  举报