• (三)简单使用Spring



    Spring学习目录

    上一篇:(二)Spring概述

    下一篇:(四)Spring对IoC的实现

    Spring下载

    Spring下载地址:https://repo.spring.io/ui/native/release/org/springframework/spring/

    将下载的zip包解压:
    请添加图片描述
    Spring解析

    • docs:spring框架的API帮助文档
    • libs:spring框架的jar文件(用spring框架就是用这些jar包)
    • schema:spring框架的XML配置文件相关的约束文件

    Spring的jar文件

    打开libs文件夹,可以看到很多jar包
    请添加图片描述
    这些jar包的描述

    JAR文件描述
    spring-aop-5.3.9.jar这个jar 文件包含在应用中使用Spring 的AOP 特性时所需的类
    spring-aspects-5.3.9.jar提供对AspectJ的支持,以便可以方便的将面向切面的功能集成进IDE中
    spring-beans-5.3.9.jar这个jar 文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean 以及进行Inversion ofControl / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI 支持,引入spring-core.jar 及spring-beans.jar 文件就可以了。
    spring-context-5.3.9.jar这个jar 文件为Spring 核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI 所需的全部类,instrumentation组件以及校验Validation 方面的相关类。
    spring-context-indexer-5.3.9.jar虽然类路径扫描非常快,但是Spring内部存在大量的类,添加此依赖,可以通过在编译时创建候选对象的静态列表来提高大型应用程序的启动性能。
    spring-context-support-5.3.9.jar用来提供Spring上下文的一些扩展模块,例如实现邮件服务、视图解析、缓存、定时任务调度等
    spring-core-5.3.9.jarSpring 框架基本的核心工具类。Spring 其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。
    spring-expression-5.3.9.jarSpring表达式语言。
    spring-instrument-5.3.9.jarSpring3.0对服务器的代理接口。
    spring-jcl-5.3.9.jarSpring的日志模块。JCL,全称为"Jakarta Commons Logging",也可称为"Apache Commons Logging"。
    spring-jdbc-5.3.9.jarSpring对JDBC的支持。
    spring-jms-5.3.9.jar这个jar包提供了对JMS 1.0.2/1.1的支持类。JMS是Java消息服务。属于JavaEE规范之一。
    spring-messaging-5.3.9.jar为集成messaging api和消息协议提供支持
    spring-orm-5.3.9.jarSpring集成ORM框架的支持,比如集成hibernate,mybatis等。
    spring-oxm-5.3.9.jar为主流O/X Mapping组件提供了统一层抽象和封装,OXM是Object Xml Mapping。对象和XML之间的相互转换。
    spring-r2dbc-5.3.9.jarReactive Relational Database Connectivity (关系型数据库的响应式连接) 的缩写。这个jar文件是Spring对r2dbc的支持。
    spring-test-5.3.9.jar对Junit等测试框架的简单封装。
    spring-tx-5.3.9.jar为JDBC、Hibernate、JDO、JPA、Beans等提供的一致的声明式和编程式事务管理支持。
    spring-web-5.3.9.jarSpring集成MVC框架的支持,比如集成Struts等。
    spring-webflux-5.3.9.jarWebFlux是 Spring5 添加的新模块,用于 web 的开发,功能和 SpringMVC 类似的,Webflux 使用当前一种比较流程响应式编程出现的框架。
    spring-webmvc-5.3.9.jarSpringMVC框架的类库
    spring-websocket-5.3.9.jarSpring集成WebSocket框架时使用

    注意:如果采用maven只需要引入context的依赖即可。maven会自动关联其他依赖。

    第一个Spring程序

    第一步:添加spring context和Junit的依赖,我们使用Spring6的里程碑版,想要设置spring6里程碑版本的仓库,pom.xml配置如下

    <!--配置多个仓库-->
      <repositories>
        <!--spring6里程碑版本的仓库-->
        <repository>
          <id>repository.spring.milestone</id>
          <name>Spring Milestone Repository</name>
          <url>https://repo.spring.io/milestone</url>
        </repository>
      </repositories>
    
      <dependencies>
        <!--spring context依赖,相当于将spring的基础依赖引入了-->
        <!--如果想使用spring的其他模块,还需要添加其他依赖-->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>6.0.0-M2</version>
        </dependency>
    	<!--junit依赖,方便测试程序-->
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.13.2</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    当加入spring context的依赖之后,会关联引入其他依赖:
    spring aop:面向切面编程
    spring beans:IoC核心
    spring core:spring的核心工具包
    spring jcl:spring的日志包
    spring expression:spring表达式
    请添加图片描述
    第二步:定义bean

    /**
     * spring可以帮我们管理这个对象
     */
    public class User {
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    public class UserDao {
        public void insert(){
            System.out.println("新增用户");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    第三步:编写Spring的配置文件,该文件放在类的根路径下。
    IDEA内置了Spring配置文件模板,用即可
    在这里插入图片描述
    配置文件中进行bean的配置。
    这个配置文件的文件名,可以是其他名字,但一定要放在类路径当中。
    我们需要在这里配置bean,然后spring会帮我们管理这些对象。

    • bean标签:需要管理的bean对象
      • id属性:这个bean唯一标识。
      • class属性:需要管理对象的全限定类名。
    	<bean id="userBean" class="com.spring6.bean.User"></bean>
        <bean id="userDaoBean" class="com.spring6.dao.UserDao"></bean>
        <bean id="dateBean" class="java.util.Date"></bean>
    
    • 1
    • 2
    • 3

    第四步:编写测试程序
    步骤:

    • 1.获取Spring容器对象

    需要创建ApplicationContext对象,通过ClassPathXmlApplicationContext,传spring配置文件的文件名创建
    ApplicationContext:翻译为应用上下文,就是Spring容器
    ApplicationContext是一个接口,改接口下有很多的实现类,其中有一个叫ClassPathXmlApplicationContext
    ClassPathXmlApplicationContext 专门从类路径当中加载spring配置文件的Spring上下文对象
    执行完这行代码,相当于启动了Spring容器,解析spring配置文件,并且实例化所有的bean对象,放到Spring容器当中

    • 2.根据bean的id从Spring容器获取这个对象
      通过ApplicationContext的getBean方法,传一个bean的id,获取对象
    @Test
        public void testFirstSpring(){
            //1.获取Spring容器对象
            
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
            //2.根据bean的id从Spring容器获取这个对象
            Object userBean = applicationContext.getBean("userBean");
            System.out.println(userBean);
    
            
            UserDao userDaoBean = (UserDao) applicationContext.getBean("userDaoBean");
            
            System.out.println(userDaoBean);
            userDaoBean.insert();
    
            Object dateBean = applicationContext.getBean("dateBean");
            System.out.println(dateBean);
           
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    第五步:运行程序
    在这里插入图片描述

    第一个Spring程序细节剖析

    • 1.spring底层怎么创建对象
      spring首先会解析spring的xml配置文件,获取到bean标签的class属性的全限定类名,然后通过反射机制调用无参构造方法创建对象
      所以想让spring管理对象,需要保证有一个无参数构造方法。
      创建的对象会存储的一个Map集合当中
      具体是

       ```java
       key存储bean的id   value存储bean对象
       "userBean"       User对象
       "userDaoBean"     UserDao对象
       ```
      
      • 1
      • 2
      • 3
      • 4
      • 5
    • 2.spring配置文件的文件名是随意的,自定义,但是要放在类的根路径下

    • 3.在配置文件中配置的类可以使用JDK中的类,但必须有无参构造方法,例如日期类java.util.Date

    • 4.getBean()方法返回的类型是Object,访问子类的特有属性和方法时,还需要向下转型

      • (1)类型强制转换
      UserDao userDaoBean = (UserDao) applicationContext.getBean("userDaoBean");
      
      • 1
      • (2)调用getBean的重载方法,第二个参数传类的Class对象,就会转换为该类
       UserDao userDaoBean = applicationContext.getBean("userDaoBean", UserDao.class);
      
      • 1
    • 5.ApplicationContext的超级父接口是BeanFactory(翻译为bean工厂,能够生产bean对象的工厂)
      BeanFactory是IoC容器的顶级接口,可见Spring底层使用了工厂模式
      Spring底层IoC的实现:XML解析 + 工厂模式 + 反射机制

  • 相关阅读:
    4.5.CVAT——视频标注的详细步骤
    X11协议基础与实践
    Asp .Net Core 系列:集成 Consul 实现 服务注册与健康检查
    大数据基础设施搭建 - JDK
    6块钱改变世界,网易和拼多多踏入同一条河流?
    【pytorch】MNIST 梯度上升法求使得某类概率最大的样本
    Java微服务六边形结构简介
    干货 | 想给你的学术研究拍张美照吗?
    AMQ 5805报错
    软件测试/测试开发丨PyCharm安装指南与技巧分享
  • 原文地址:https://blog.csdn.net/weixin_45832694/article/details/127831552