三、Spring的入门程序

news2024/12/24 20:33:55

第一个Spring程序

  1. 创建新的空工程spring6

  2. 设置JDK版本17,编译器版本17
    在这里插入图片描述

  3. 设置IDEA的Maven:关联自己的maven
    在这里插入图片描述

  4. 在空的工程spring6中创建第一个maven模块:spring6-001-first

  5. 在pom.xml添加spring context依赖和junit依赖,

    <?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>org.example</groupId>
        <artifactId>spring-001-first</artifactId>
        <version>1.0-SNAPSHOT</version>
        <!--打包方式jar-->
        <packaging>jar</packaging>
    
    
        <!--依赖-->
        <dependencies>
            <!--spring context依赖:使用的是6.0.0-M2里程碑版-->
            <!--引入spring context依赖之后,表示将Spring的基础依赖引入了-->
            <!--想使用spring的jdbc,或者其他的tx,还需要再次添加依赖-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>6.0.2</version>
            </dependency>
    
            <!--junit依赖-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.13.2</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <properties>
            <maven.compiler.source>17</maven.compiler.source>
            <maven.compiler.target>17</maven.compiler.target>
        </properties>
    
    </project>
    

    在这里插入图片描述
    当加入spring context的依赖之后,会关联引入其他依赖:
    spring aop:面向切面编程
    spring beans:IoC核心
    spring core:spring的核心工具包
    spring jcl:spring的日志包
    spring expression:spring表达式

  6. 定义bean:User

    package com.powernode.spring6.bean;
    
    /**
     * bean,封装用户信息
     */
    public class User {
    }
    
  7. 使用IDEA工具自带的spring配置文件的模板创建:spring.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">
        <!--Spring配置文件-->
        <!--配置bean,spring才可以帮助我们管理这个对象-->
        <!--
            bean标签的两个重要属性
                id:这个bean的唯一标识,不能重复
                class:必须填写类的全限定类名(带包名)
        -->
        <bean id="userBean" class="com.powernode.spring6.bean.User"/>
    </beans>
    
  8. 编写测试程序

    package com.powernode.spring6.test;
    
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class FirstSpringTest {
        @Test
        public void testFirstSpringCode(){
            // 第一步:获取Spring容器对象
            /*
            ApplicationContext : spring容器,是一个接口,接口下有很多实现类,有一个实现类ClassPathXmlApplicationContext
            ClassPathXmlApplicationContext 专门从类路径中加载spring配置文件的一个Spring上下文对象
            这行代码只要执行:就相当于启动了Spring容器,解析spring.xml文件,并且实例化所有的bean对象,放到spring容器当中。
             */
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
    
            // 第二步:根据bean的id从Spring容器中获取对象
            Object userBean = applicationContext.getBean("userBean");
            System.out.println(userBean);
    
        }
    }
    

详细剖析

  1. bean标签的id属性不可以重复

  2. 底层是通过反射机制调用无参数构造方法创建对象的

    // dom4j解析beans.xml文件,从中获取class的全限定类名
    // 通过反射机制调用无参数构造方法创建对象
    Class clazz = Class.forName("com.powernode.spring6.bean.User");
    Object obj = clazz.newInstance();
    
  3. 创建好的对象是存储到一个Map集合当中
    在这里插入图片描述

  4. spring配置文件的名字可以是任意的

  5. spring的配置文件可以有多个,在ClassPathXmlApplicationContext构造方法的参数上传递文件路径即可。
    通过源码可以看到:

    public ClassPathXmlApplicationContext(String... configLocations) throws BeansException {
         this(configLocations, true, (ApplicationContext)null);
    }
    
  6. 在spring配置文件中配置的bean可以是任意类,只要这个类不是抽象的,并且提供了无参数构造方法。

  7. getBean()方法调用时,如果bean的id不存在,不会返回null,而是出现异常

  8. 使用getBean()方法的第二个参数来指定返回的bean的类型

    User userBean = applicationContext.getBean("userBean", User.class);
    
  9. xml配置文件如果没有在类路径当中,使用FileSystemXmlApplicationContext类进行加载配置文件

    ApplicationContext applicationContext = new FileSystemXmlApplicationContext("d:/spring.xml");
    

    这种方式很少用。一般都是将配置文件放到类路径当中,这样可移植性更强。

  10. ApplicationContext接口的超级父接口BeanFactory。

    BeanFactory(翻译为Bean工厂,就是能够生产Bean对象的一个工厂对象。)
    BeanFactory是IoC容器的顶级接口。
    Spring的IoC容器底层实际上使用了:工厂模式。
    Spring底层的IoC是通过 XML解析 + 工厂模式 + 反射机制 实现的

  11. 不是在调用getBean()方法的时候创建对象,执行以下代码的时候,就会实例化对象。

     new ClassPathXmlApplicationContext("spring.xml");
    

Spring6启用Log4j2日志框架

从Spring5之后,Spring框架支持集成的日志框架是Log4j2

  1. 引入Log4j2的依赖

    <!--log4j2的依赖-->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.19.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-slf4j2-impl</artifactId>
      <version>2.19.0</version>
    </dependency>
    
  2. 在类的根路径下提供log4j2.xml配置文件(文件名固定为:log4j2.xml,文件必须放到类根路径下。)

    <?xml version="1.0" encoding="UTF-8"?>
    
    <configuration>
    
        <loggers>
            <!--
                level指定日志级别,从低到高的优先级:
                    ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
            -->
            <root level="DEBUG">
                <appender-ref ref="spring6log"/>
            </root>
        </loggers>
    
        <appenders>
            <!--输出日志信息到控制台-->
            <console name="spring6log" target="SYSTEM_OUT">
                <!--控制日志输出的格式-->
                <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss SSS} [%t] %-3level %logger{1024} - %msg%n"/>
            </console>
        </appenders>
    
    </configuration>
    
  3. 配置好了就启用了Log4j2日志框架

  4. 自己使用log4j2记录日志信息

    // 第一步:创建日志记录器对象
    // 获取FirstSpringTest类的日志记录器对象,也就是说只要是FirstSpringTest类中的代码执行记录日志的话,就输出相关的日志信息。
    Logger logger = LoggerFactory.getLogger(FirstSpringTest.class);
    
    // 第二步:记录日志,根据不同的级别来输出日志
    logger.info("一条消息");
    logger.debug("一条调试信息");
    logger.error("一条错误信息");
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/383202.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于轻量级YOLO开发构建中国象棋目标检测识别分析系统

关于棋类相关的项目在我之前的博文里面都有做过&#xff0c;如下&#xff1a;《yolov5s融合SPD-Conv用于提升小目标和低分辨率图像检测性能实践五子棋检测识别》《YOLOV5融合SE注意力机制和SwinTransformer模块开发实践的中国象棋检测识别分析系统》《基于yolov5s实践国际象棋目…

第七章.集成学习(Ensemble Learning)—袋装(bagging),随机森林(Random Forest)

第七章.集成学习 (Ensemble Learning) 7.1 集成学习—袋装(bagging),随机森林(Random Forest) 集成学习就是组合多个学习器&#xff0c;最后得到一个更好的学习器。 1.常见的4种集成学习算法 个体学习器之间不存在强依赖关系&#xff0c;袋装&#xff08;bagging&#xff09;…

智慧厕所智能卫生间系统有哪些功能

南宁北站智能厕所主要功能有哪些&#xff1f;1、卫生间环境空气监测男厕、女厕环境空气监测系统包括对厕所内的温度、湿度、氨气、硫化氢、PM2.5、烟雾等气体数据的实时监测。2、卫生间厕位状态监测系统实时监测厕位内目前的使用状态(有人或无人&#xff09;&#xff0c;数据信…

SQLyog图形化界面工具【超详细讲解】

目录 一、SQLyog 介绍 二、SQLyog 社区版下载 三、SQLyog 安装 1、选择Chinese后点击OK 2、点击“下一步” 3、选择“我接受”后点击“下一步” 4、点击“下一步” 5、修改安装位置&#xff08;尽量不要安装在C盘&#xff09;&#xff0c;点击“安装” 6、安装后点击“…

无线WiFi安全渗透与攻防(三)之Windows扫描wifi和破解WiFi密码

系列文章 无线WiFi安全渗透与攻防(一)之无线安全环境搭建 无线WiFi安全渗透与攻防(二)之打造专属字典 windows下wifi进行扫描和破解 1.wifi扫描 &#xff08;1&#xff09;.软件介绍 WirelessMon是一款无线网络扫描工具&#xff0c;它可以帮助用户扫描附近的无线信号&…

操作系统——14.调度算法的评价指标

这篇文章我们来讲一下算法调度的评价指标&#xff0c;为后面讲调度算法做下铺垫 目录 1.概述 1.CPU的利用率 2.系统吞吐量 3.周转时间 4.等待时间 5.响应时间 6.小结 1.概述 首先&#xff0c;我们来看一下这节内容的大体框架 1.CPU的利用率 由于早期的CPU造价极其昂贵…

1.flink简介与重要概念

Introduction 简介 Apache Flink是一个框架和分布式处理引擎&#xff0c;用于在无界和有界数据流上进行有状态计算。Flink可以运行在常见集群环境如YARN Kubernetes Mesos,内存级别的速度和任意的扩展 Unbounded streams 无界数据流 无界数据流有开始但是没有结束,需要持续不断…

JavaSe第4次笔记

1.转义字符和编程语言无关。 2.斜杠(\)需要转义&#xff0c;反斜杠(/)不需要转义。 3.不能做switch的参数的数据类型&#xff1a;long float double boolean( String可以)。 4.输入的写法&#xff1a;Scanner(回车自动带头文件(import java.util.Scanner;)) Scanner scan …

软件测试(linux命令篇-01文件操作命令)

linux文件篇命令linux系统常用文件操作命令1、查看目录内容及常用参数&#xff1a;ls2、目录切换&#xff1a;cd 3、创建文件&#xff1a;touch 4、创建目录 &#xff1a;mkdir5、 删除文件或目录&#xff1a;rm6、文件或目录的复制&#xff1a;cp7、文件或目录的移动&#xff…

TMS Sphinx crack

TMS Sphinx crack 用于身份访问管理的TMS Sphinx Delphi框架&#xff0c;包括授权和身份验证。 TMS Sphinx允许您为多个应用程序实现单点登录(SSO)&#xff1a;web、本机、移动或机器到机器API通信。它可用于通过登录表单、类似的用户界面和基于服务的身份验证来验证实际用户&a…

如何制作一个自定义的winpe?

winpe制作过程 获取相关资源 https://www.aliyundrive.com/s/MP58JbRsm76 文件存放位置 将压缩包存放在一个全英文目录下了,我这里选择了D:/winpe目录 解压文件 将三个压缩包进行解压到当前目录,如下图所示 创建一个mount目录,并在mount目录下分别创建boot和install目…

C++11:继承

目录 继承的基本概念 继承方式 基类和派生类对象赋值转换/切片 继承中的作用域 派生类的四个成员函数&#xff1a; 构造函数 拷贝构造函数 赋值重载 析构函数 静态成员 继承与友元 多继承 菱形继承 多继承的指针偏移问题 组合 继承的基本概念 继承出现的契机是某一…

Java 多线程 --- 锁的概念和类型划分

Java 多线程 --- 锁的概念和类型划分锁的概念乐观锁与悲观锁公平锁与非公平锁什么是可重入锁独占锁与共享锁轻量级锁和重量级锁自旋锁 (Spinlock)锁的概念 锁可以将多个线程对共享数据的并发访问转换为串行访问, 这样一个共享数据一次只能被一个线程访问, 该线程访问结束后其他…

cocos2dx+lua学习笔记:UIPageView的使用

前言 本篇在讲什么 本篇简单介绍Lua篇cocos2dx中UIPageView的相关内容 仅介绍简单的应用&#xff0c;仅供参考 本篇适合什么 适合初学Cocos2dX的小白 适合想要在Cocos2dx-lua中使用UIPageView的人 本篇需要什么 对Lua语法有简单认知 对Cocos2dx-Lua有简单认知 Cocos2…

Hostease美国Linux主机方案租用推荐

美国Linux主机市场在全球市场上具有显著的优势&#xff0c;这使得美国的主机提供商可以提供高性能、高可靠性和高安全性的主机方案&#xff0c;同时为用户提供广泛的选择和灵活性。这些优势也使得美国成为全球最大的主机市场之一。本文将介绍Hostease的美国Linux主机方案租用推…

22《Protein Actions Principles and Modeling》-《蛋白质作用原理和建模》中文分享

​《Protein Actions Principles and Modeling》-《蛋白质作用原理和建模》 本人能力有限&#xff0c;如果错误欢迎批评指正。 第五章&#xff1a;Folding and Aggregation Are Cooperative Transitions &#xff08;折叠和聚合是同时进行的&#xff09; -蛋白质折叠的协同作…

基于C/C++获取电脑网卡的IP地址信息

目录 前言 一、网卡是什么&#xff1f; 二、实现访问网卡信息 1.引入库及相关的头文件 2.操作网卡数据 3. 完整代码实现 4.结果验证 总结 前言 简单示例如何在windows下使用c/c代码实现 ipconfig/all 指令 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考…

【Python】Python项目打包发布(四)(基于Nuitka打包PySide6项目)

Python项目打包发布汇总 【Python】Python项目打包发布&#xff08;一&#xff09;&#xff08;基于Pyinstaller打包多目录项目&#xff09; 【Python】Python项目打包发布&#xff08;二&#xff09;&#xff08;基于Pyinstaller打包PyWebIO项目&#xff09; 【Python】Pytho…

【机器学习】决策树(理论)

决策树&#xff08;理论&#xff09; 目录一、何为决策树1、决策树的组成2、决策树的构建二、熵1、熵的作用2、熵的定义3、熵的计算4、条件熵的引入5、条件熵的计算三、划分选择1、信息增益&#xff08; ID3 算法选用的评估标准&#xff09;2、信息增益率&#xff08; C4.5 算法…

使用ARM嵌入式工控机构建Node-RED应用的优势

Node-RED是一个基于Node.js的开源可视化流程编程环境&#xff0c;可以轻松构建自定义应用程序&#xff0c;通过连接简单的节点来完成复杂的任务。Node-RED提供了一种简单的方法&#xff0c;可以快速连接到外部服务&#xff0c;从而实现物联网应用的开发。 Node-RED的优点包括&…