Java后端开发 —— 记录一个spring入门案例

news2024/9/25 9:39:30

前言

        最近荔枝在转技术栈呢,后端Java零零散散也学了半个月,在一边总结blog输出的同时一遍实操项目。最近学完JavaSE部分的重点之后荔枝来入手spring框架,说起spring其实大家耳熟能详的就想起IoC和AOP了,但在这篇文章荔枝主要还是梳理一下一个最简单的spring框架配置流程并把相应需要的环境和踩过的坑给大家分享一下哈哈哈,大家避避雷~


文章目录

前言

一、安装配置环境

二、Spring框架简介

三、入门操作案例

3.1 项目创建 

3.2 将对象实例化过程交给spring

3.3 日志框架Log4j2

总结


一、安装配置环境

        在正式开始之前我们需要配置好环境,首先需要有一个IDEA,当然使用Eclipse也可以只是可能步骤不太一样了。因为荔枝是从pytyon转技术栈过来的,所以对于pycharm用习惯了,对于同一个公司(JetBrains)出的,所以一开始荔枝就钟情于IDEA的风格了。对于基本的IDEA和JDK配置以及Maven的下载和配置,大家可以看看荔枝的另外两篇文章

步入JAVA——环境搭建与配置icon-default.png?t=N6B9https://blog.csdn.net/qq_62706049/article/details/131500175Maven —— 项目管理工具icon-default.png?t=N6B9https://blog.csdn.net/qq_62706049/article/details/131500175

大家可能会疑惑哈,为啥没说spring怎么下载和安装呢?其实当初荔枝和绝大多数入门的小伙伴

一样直接在网上找下载教程啥的,但是哈走了一点弯路浪费一天时间~~~

大多数博客是这么写的,首先进入Spring官网:Spring | Home 大家可能需要挂一下梯子上去看看。之后选择Projects——Spring Farmework,然后点击上面的Github图标并选择Access ...中的链接并跳转到如下页面:

 跳转至一个Jfrog平台并按照大多数blog提供的方法你会发现找不到文件,荔枝翻了翻发现其实都没必要自己去找,直接输入这个网址就行了:https://repo.spring.io/artifactory/release/org/springframework/spring

        然后荔枝除了一些小状况,在url中输入上面的链接并跳转会被重定向到JFrog平台的登录入口,因为刚刚开始接触并不了解所以荔枝就打算直接注册一个账号。值得伤心的是没有找到注册入口,那就继续谷歌搜索解决方案:荔枝找了一会发现可以在JFrog其实有点像一个代码管理仓库,可以用Docker来安装并在本地首次进入可以注册账号,这部就解决啦哈哈哈哈。

        然而显示再次打脸,账号是注册好了但显示密码不对或者账户被锁定了。不对劲,荔枝感觉不应该这么麻烦滴,查了一下其实没必要把spring的jar包下载下来,可以在项目中通过配置pom.xml文件来自动导入嘞,一天白干活呜呜呜呜~~~


二、Spring框架简介

        Java Spring是一个开源框架,从2003年开始兴起的一个轻量级Java开发框架,直至今天它仍然有着极大的贡献度。Spring是为了解决企业级应用开发的复杂性而创建的,降低了开发的复杂度。Spring框架主要通过以下4种关键策略来降低Java后端开发的复杂性:

  • 基于POJO的轻量级和最小侵入性编程;
  • 通过IOC(控制反转)、依赖注入(DI)和面向接口编程实现松耦合;
  • 基于切面编程(AOP)和惯例进行声明式编程;
  • 通过切面和模板减少样式代码。 

        我们最常说的Spring框架其实指的是Spring Framwork,但Spring最为Java中的顶级项目,还有诸如Spring Cloud、SpringData和SpringBoot等组件,又称为Spring全家桶。基本上现在Java最主流的开发框架就是Spring和它的周边了,Spring的核心则是控制反转IOC和面向切面编程AOP。

Spring体系结构

模块功能详解

  • 核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
  • Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
  • Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
  • Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
  • Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
  • Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
  • Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。 

三、入门操作案例

3.1 项目创建 

首先打开你的IDEA,这里记得下载专业版的哈,学生通过申请是可以免费使用一年的。一次选择File——New——Projects新建一个工程项目。

在配置那里选择是基于Maven创建的,这非常重要!同时需要配置项目名称和包名,按照自己项目的需求选择对应spring要求的Java JDK版本,这里荔枝选择的是JDK17,之后点击确定就创建好了。

创建好后可以选择创建子项目,这里荔枝是打算练手所以就创建了子项目。也是类似的操作,依次选择New——Module来创建子项目,确定好对应配置即可。

 完成之后我们就需要打开项目的工程目录并在src目录下来配置参数,依次打开src——main——resources,选择创建一个xml文件,这里的命名可以随便,这里我命名为bean.xml。

3.2 将对象实例化过程交给spring

我们可以在src——main——java——包名中右键创建一个User类,并将该对象的实例化托管给spring,通过这个过程来体会spring的妙用。

package com.crj;

public class User {
    public User(){
        System.out.println("无参构造被执行了");
    }

    public void add(){
        System.out.println("add...");
    }
}

在前面创建的xml文件中配置<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">

    <!--在spring中完成对象的创建
        借助bean标签
            id属性:唯一标识
            class属性:要创建对象所在类的全路径
    -->
    <bean id="user" class="com.crj.User"></bean>
</beans>

 配置好后我们创建一个测试类来测试一下对象是否可以创建成功,按照之前的语法,我们在实例化对象的时候会采用User user = new User()来实例化对象,这里不再使用new对象的方式来获取user对象,而是把这个过程交给spring即可。

package com.crj;

import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestUser {

    @Test
    public void testUserObject(){
        //加载spring配置文件,对象创建
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");

        //获取创建的对象
        User user = (User)context.getBean("user");
        System.out.println(user);
        //使用对象调用方法进行测试
        user.add();
 
    }
    
}

spring返回创建的对象过程

  1. 加载bean.xml文件
  2. 对文件进行解析操作
  3. 获取xml文件bean标签属性值
  4. 使用Java反射的方式根据类的全路径创建对象
  5. 创建后的对象会存储在一个容器map集合中
//Java反射的方式
Class clazz = Class.forName("com.crj.User")
User user = (User)clazz.getDeclaredConstructor().newInstance()

3.3 日志框架Log4j2

        Apache Log4j2是一个开源的日志记录组件,使用非常的广泛。在工程中以易用方便代替了System.out等打印语句,它是JAVA下最流行的日志输入工具。Log4j2主要有几个重要的部分:明确日志信息的优先级(其中优先级高的日志级别会自动屏蔽优先级低的日志,换句话说就是只会显示优先级高的日志);明确日志信息的输出目的地;日志信息的输出格式。

在正式使用日志信息Log4j2这个组件之前,我们除了在最开始的bean.xml中引入组件外,还需要单独配置日志文件的设置。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <loggers>
        <!--
            level指定日志级别,从低到高的优先级:
                TRACE < DEBUG < INFO < WARN < ERROR < FATAL
                trace:追踪,是最低的日志级别,相当于追踪程序的执行
                debug:调试,一般在中,都将其设置为最低的日志级别
                info:信息,输出重要的信息,使用较多
                warn:警告,输出警告的信息
                error:错误,输出错误信息
                fatal:严重错误
        -->
        <root level="DEBUG">
            <appender-ref ref="spring6log" />
            <appender-ref ref="RollingFile" />
            <appender-ref ref="log" />
        </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>
<!--        会在本地你指定的路径下创建一个log文件,在每次执行程序的时候可能自动清空这是由append属性来决定,适合测试使用-->
        <File name="log" fileName="自己设置的存储路径/test.log" append="false">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </File>
<!--        打印所有的信息并在每次大小超过size后就会自动压缩作为存档-->
        <RollingFile name="RollingFile" fileName="自己设定的存储路径/app.log" filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss-z} %-5level %class{36} %L %M - %msg%xEx%n"/>
            <SizeBasedTriggeringPolicy size="50MB"/>
            <!--DefaultRoLLoverstrategy属性如不设置,
            刚默认为最多同一文件夹下7个文件,这里设置了20-->
            <DefaultRolloverStrategy max="20"/>
        </RollingFile>
    </appenders>

</configuration>

测试一下

package com.crj;

import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestUser {
//    手动执行日志写入,首先创建一个Logger对象
    private Logger logger = LoggerFactory.getLogger(TestUser.class);
    @Test
    public void testUserObject(){
        //加载spring配置文件,对象创建
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");

        //获取创建的对象
        User user = (User)context.getBean("user");
        System.out.println(user);
        //使用对象调用方法进行测试
        user.add();

        //手动写日志
        logger.info("执行调用成功。。。");
    }

}

控制台输出:


总结

        其实这篇文章荔枝并没有长篇大论地去介绍Spring的体系内容,荔枝主要还是记录以下自己是如何创建工程的、踩到了什么坑、粗浅了解下Spring框架的体系结构以及体会以下入门案例哈哈哈,希望能帮助到有需要的小伙伴~~~

今朝已然成为过去,明日依然向往未来!我是小荔枝,在技术成长的路上与你相伴,码文不易,麻烦举起小爪爪点个赞吧哈哈哈~~~ 比心心♥~~~

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

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

相关文章

Ubuntu22.04 安装Anaconda

文章目录 1.下载Anaconda2.安装Anaconda3.启动环境4.常用命令4.1创建虚拟环境4.2查询当前系统conda虚拟环境4.3挂载虚拟环境4.4退出虚拟环境4.5查看已安装的工具包4.6删除虚拟环境 1.下载Anaconda &#xff08;1&#xff09;下载地址&#xff1a;https://mirrors.tuna.tsinghu…

低代码开发重要工具:jvs-flow(流程引擎)审批功能配置说明

流程引擎场景介绍 流程引擎基于一组节点与执行界面&#xff0c;通过人机交互的形式自动地执行和协调各个任务和活动。它可以实现任务的分配、协作、路由和跟踪。通过流程引擎&#xff0c;组织能够实现业务流程的优化、标准化和自动化&#xff0c;提高工作效率和质量。 在企业…

无涯教程-jQuery - jQuery.ajax( options )方法函数

jQuery.ajax(options)方法使用HTTP请求加载远程页面。 $.ajax()返回它创建的XMLHttpRequest。在大多数情况下&#xff0c;您不需要该对象直接进行操作&#xff0c;但是如果您需要手动中止请求&#xff0c;则可以使用该对象。 jQuery.ajax( options ) - 语法 $.ajax( options…

Talk | 卡内基梅隆大博士生侯博涵:MLC-LLM-机器学习编译与在大语言模型上的应用

本期为TechBeat人工智能社区第516期线上Talk&#xff01; 北京时间7月26日(周三)20:00&#xff0c; 卡内基梅隆大博士生—侯博涵的Talk已经准时在TechBeat人工智能社区开播了&#xff01; 他与大家分享的主题是: “MLC-LLM-机器学习编译与在大语言模型上的应用”&#xff0c;与…

服务器VNC软件与服务器中Sentaurus TCAD软件相关问题汇总(持续更新中)

目录 license失效问题个人端口的VNC无法连接/系统页面失效&#xff08;无最小化、关闭等&#xff09;也可以用该方法重启VNC后端口发生混乱/断电后个人端口无法连接操作的步骤在Centos环境下给Sentaurus TCAD安装编辑器jeditSSH重启VNC rootCentos查看NETMASK,GATWAY,DNS licen…

基于vue3.0实现vr全景编辑器

随着社会的不断发现&#xff0c;现实生活中有很多时候会使用到全景现实&#xff0c;比如房地产行业vr看房&#xff0c;汽车行业vr看车之类的&#xff0c;全景可视化真实还原了现场的场景&#xff0c;真正做到沉浸式体验。 现在我们基于vue3.0版本开发出了一款沉浸式的编辑器&a…

拿捏 ---> 水仙花数+变种水仙花数

文章目录 题目描述(水仙花数)思路代码示例方法一方法二 题目描述&#xff08;变种水仙花数&#xff09;思路代码示例 题目描述(水仙花数) 求出0&#xff5e;1000之间的所有“水仙花数”并输出。“水仙花数”是指一个n位数&#xff0c;其各位数字的n次方之和确好等于该数本身&a…

ThinkPHP8知识详解:ThinkPHP8特性和功能介绍

ThinkPHP8 是一个开源的 PHP 框架&#xff0c;采用了面向对象编程和 MVC&#xff08;Model-View-Controller&#xff09;设计模式&#xff0c;提供了丰富的功能和易于使用的 API&#xff0c;是一个适用于 web 应用开发的高效框架。 ThinkPHP8具有许多强大的特性和功能&#xf…

k8s容器日志收集方案

背景 由于以下容器本身特性和现有日志采集工具的缺陷&#xff0c;开发者在收集Kubernetes分布式集群日志时常常遇到困扰&#xff1a; 容器本身特性&#xff1a; 采集目标多&#xff1a;容器本身的特性导致采集目标多&#xff0c;需要采集容器内日志、容器stdout。对于容器…

三分钟带你了解音频转文字哪个好用

在数字世界的角落里&#xff0c;有一项神奇的技术——音频转文字。它隐藏着巨大的力量和惊人的能力。它如同一位神奇的文字解码师&#xff0c;能够将听觉的旋律转化为视觉的符号&#xff0c;让语言的美妙之音在屏幕上跃然纸上。接下来&#xff0c;让我带你进入这个充满奇迹的数…

常用程序分段,编译流程

实际这些概念也要根据不同编译器有些微的区分&#xff0c;常用的结构模型应该就是LINUX程序分段以及GNU编译链的编译留成。 先看编译流程 程序分段: 堆存储和栈存储的区别 堆和栈的区别主要有五大点&#xff0c;分别是&#xff1a; 1、申请方式的不同。栈由系统自动分配&…

tinkerCAD案例:13.Ruler - Cm 标尺 - 厘米

tinkerCAD案例&#xff1a;13.Ruler - Cm 标尺 - 厘米 原文 While it’s fun to create things at any size you wish, sometimes you need to measure an exact distance. In this lesson you will learn to create an accurate ruler that measures centimeters. 虽然创建任…

六、代理模式

文章目录 一、代理模式1、代理模式的好处和缺点1.1 代理模式理解加深 一、代理模式 为什么要学习代理模式&#xff1f; 代理模式是Spring AOP 以及 Spring MVC 的底层&#xff01;&#xff01;并且还是 JAVA 的23种设计模式之一&#xff01;&#xff01; 代理模式的分类&#…

【TI毫米波雷达笔记】IWR6843AOP工程模板创建 cannot find file “libsleep_xwr68xx.aer4f“等解决方案

【TI毫米波雷达笔记】IWR6843AOP工程模板 cannot find file “libsleep_xwr68xx.aer4f” 解决方案 我在建立工程时 发现了一个问题 参考&#xff1a; blog.csdn.net/qq_16660871/article/details/126246572报错为 cannot find file "libsleep_xwr68xx.aer4f"最后检…

【Linux】深入理解缓冲区

目录 什么是缓冲区 为什么要有缓冲区 缓冲区刷新策略 缓冲区在哪里 手动设计一个用户层缓冲区 什么是缓冲区 缓冲区本质上一块内存区域&#xff0c;用来保存临时数据。缓冲区在各种计算任务中都广泛应用&#xff0c;包括输入/输出操作、网络通信、图像处理、音频处理等。 …

Nodejs 第一章(介绍)

概述 nodejs 并不是JavaScript应用&#xff0c;也不是编程语言&#xff0c;因为编程语言使用的JavaScript,Nodejs是 JavaScript的运行时。 Nodejs是构建在V8引擎之上的&#xff0c;V8引擎是由C/C编写的&#xff0c;因此我们的JavaSCript代码需要由C/C转化后再执行。 NodeJs 使…

看了这篇文章,我也会用grid布局了

grid网格布局 网格布局是由一系列水平及垂直的线构成的一种布局模式&#xff0c;使用网格&#xff0c;我们能够将设计元素进行排列&#xff0c;帮助我们设计一系列具有固定位置以及宽度的元素的页面&#xff0c;使我们的网站页面更加统一。 它将网页划分成一个个网格&#xff…

Cilium系列-6-从地址伪装从IPtables切换为eBPF

系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, 可以进一步提升 Cilium 的网络性能. 具体调优项包括不限于: 启用本地路由(Native Routing)完全替换 KubeProx…

探索大型语言模型的开源人工智能基础设施:北京开源AI Meetup回顾

原文参见Explore open source AI Infra for Large Language Models: Highlights from the Open Source AI Meetup Beijing | Cloud Native Computing Foundation 背景介绍&#xff1a; 最近&#xff0c;在 ChatGPT 的成功推动下&#xff0c;大型语言模型及其应用程序的流行度激…

递归实现 组合问题+排列问题(DFS)

递归不是循环&#xff0c;递归利用了系统栈&#xff0c;只要是函数都会被系统管理。当执行到函数地址入口时就会为函数在系统栈上分配一块内存。当函数在自己内部再次调用自己&#xff0c;那么系统又会给此时调用的函数再次分配内存&#xff0c;结果说就是层层调用。递归就是这…