首页 > 编程语言 >JAVA Spring 基础

JAVA Spring 基础

时间:2024-12-08 10:56:43浏览次数:7  
标签:code Java Spring 代码 基础 Maven spring JAVA

Maven ⼯程

像composer的composer.json、Make的makefile文件一样,Maven项目的核心是pom.xml文件。POM(Project Object Model,项目对象模型)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。

类的生命周期

我们知道类的生命周期为装载、连接、初始化、使用和卸载,
而静态代码块,构造代码块,普通代码块,静态变量等,
在不同的阶段被创建静态的代码块、方法、变量可以说就是类的一部分,在类加载时就已经加载(不一定执行)
代码块

1.普通代码块: 就是类中方法的方法体

public void xxx(){
//code
}

2.构造块: 用{}裹起来的代码片段,构造块在创建对象时会被调用,每次创建对象时都会被调用,并且优先于类构造函数执行。 构造块中定义的变量是局部变量。

{
//code
}

3.静态块: 用static{}裹起来的代码片段,只会被执行一次(第一次加载此类时执行,比如说用Class.forName("")加载类时就会执行static block),静态块优先于构造块执行。

static{
//code
}

4.同步代码块: 使用synchronized(obj){}裹起来的代码块,在多线程环境下,对共享数据进行读写操作是需要互斥进行的,否则会导致数据的不一致性。常见的是synchronized用来修饰方法,其语义是任何线程进入synchronized需要先取得对象锁如果被占用了,则阻塞,实现了互斥访问共享资源。而synchronized也是有代价的。一个常见的场景是,一个冗长的方法中,其实只有一小段代码需要访问共享资源,这时使用同步块,就只将这小段代码裹在synchronized block,既能够实现同步访问,也能够减少同步引入的开销。 同步代码块须写在方法中。

synchronized(obj){
//code
}

static和final的意义是不同的,static修饰的时候代表对象是静态的,而final修饰的时候代表对象只能赋值一次。

ref :将 IoC 中的另外⼀个 bean 赋给当前的成员变量(DI)

IoC 底层原理

读取配置⽂件,解析 XML。
通过反射机制实例化配置⽂件中所配置所有的 bean。

Spring configuration consists of at least one and typically more than one bean definition that the container must manage. XML-based configuration metadata configures these beans as <bean/> elements inside a top-level <beans/> element. Java configuration typically uses @Bean-annotated methods within a @Configuration class.


The convention is to use the standard Java convention for instance field names when naming beans. That is, bean names start with a lowercase letter and are camel-cased from there. Examples of such names include accountManager, accountService, userDao, loginController, and so forth.

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。

Java Server Pages

JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。

Lombok 是一款 Java 开发工具,它可以通过注解来帮助程序员自动生成 Java 代码,从而简化 Java 开发过程。

Lombok 插件产生的主要原因是 Java 语言臃肿的语法,需要大量的样板代码,以及冗长臃肿的 getter 和 setter 方法。当你的模型层非常大时,手动编写所有这些代码会变得非常繁琐和无聊。因此,Lombok 插件为我们自动生成 Java 代码并帮助优化 Java 开发过程,提高效率。

IDEA中的较高版本(从2020.3版本起),已经自动集成了Lombok,无需额外安装插件。

Linux命令: mkdir -p :递归创建目录,即使上级目录不存在,会按目录层级自动创建目录

使用 @Data 注解,加在数据类的定义处。

1、@Data注解是lombok.jar包下的注解,该注解通常用在实体bean上,不需要写出set和get方法,但是具备实体bean所具备的方法,简化编程提高变成速度。

2、@Data相当于@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode这5个注解的合集。

backwards compatible features

向后兼容功能

使用对象时,在程序中不要主动使用new产生对象,转换为由外部提供对象。也就是IoC(Inversion of Control)控制反转。

IoC:是一种编程思想。使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。(就是将在业务层里new数据层对象的行为交给别人来做,业务层只需要调用new好的对象即可。)Spring的核心容器模块中就实现了这一思想。LoC is also known as dependency injection (DI)

As of Spring Framework 6.0, Spring requires Java 17+.

When you learn about a framework, it’s important to know not only what it does but what principles it follows.

spring设计原则:

Provide choice at every level. Spring lets you defer design decisions as late as possible. For example, you can switch persistence providers through configuration without changing your code. The same is true for many other infrastructure concerns and integration with third-party APIs.

Accommodate diverse perspectives. Spring embraces flexibility and is not opinionated about how things should be done. It supports a wide range of application needs with different perspectives.

Maintain strong backward compatibility. Spring’s evolution has been carefully managed to force few breaking changes between versions. Spring supports a carefully chosen range of JDK versions and third-party libraries to facilitate maintenance of applications and libraries that depend on Spring.

Care about API design. The Spring team puts a lot of thought and time into making APIs that are intuitive and that hold up across many versions and many years.

Set high standards for code quality. The Spring Framework puts a strong emphasis on meaningful, current, and accurate javadoc. It is one of very few projects that can claim clean code structure with no circular dependencies between packages.

Spring Boot

Spring Boot provides a quick (and opinionated) way to create a production-ready Spring-based application. It is based on the Spring Framework, favors convention over configuration, and is designed to get you up and running as quickly as possible.
get you up 上手

LoC && AOP

几种原因

使用者依赖采用了Spring国外官网的依赖,没有采用阿里的依赖镜像(可看成是Spring官网的国内复制版本,阿里镜像被使用起来之后,项目加载依赖包速度更快)。

解决方法: 找到Maven安装目录下\conf\settings.xml文件,并修改,详细修改方式见本文章附录一。

pom文件里面手动添加的依赖配置版本不一致或者配错了。

解决方法: Dependence的写法是不固定的,复制artifactId标签的值“ spring-boot-starter-web ”到maven的官网去搜索对应的写法,详细步骤见本文章附录二。

Idea编译器的maven没有将依赖成功下载

解决方法: 点击idea开发工具右侧栏的Maven,查看是否有标红的选项,有标红的选项则点击重新下载,等待依赖从镜像中全部下载完成,等到没有标红之后再去查看代码里面的注解是否还报错,如果依旧报错则选择File->Invaledate Caches/Restart清除缓存并重启idea,图文步骤见本文章附录三。

以上这些步骤都做完了,还是不能解决一下啊星标处爆红的问题,可以采用下面这个方式:

JSP

<%--
 Created by IntelliJ IDEA.
 User: southwind
 Date: 2019-03-14
 Time: 09:12
 To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
 <title>Title</title>
</head>
<body>
 <form action="/data/list" method="post">
 ⽤户1编号:<input type="text" name="users[0].id"/><br/>
 ⽤户1名称:<input type="text" name="users[0].name"/><br/>
 ⽤户2编号:<input type="text" name="users[1].id"/><br/>
 ⽤户2名称:<input type="text" name="users[1].name"/><br/>
 ⽤户3编号:<input type="text" name="users[2].id"/><br/>
 ⽤户3名称:<input type="text" name="users[2].name"/><br/>
 <input type="submit" value="提交"/>
 </form>
</body>
</html>

A data access object (DAO)

数据访问对象

scoping 作用域

错误汇总

Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway.

这样一个错误,经过网上和官网查找原因是因为spring cloud gateway 是建立在spring boot 2.x 和 spring webflux基础上的既:gateway 本身已经包含了spring mvc 的功能,正与提示的一样和spring boot 的web starter冲突了

Unable to find GatewayFilterFactory with name QueryParamDecode

set 外部依赖包


导入形式

IDEA2021.3.2拉取maven报错maven-default-http-blocker解决方法

因为IDEA2021.3.2 的Maven是3.8.1后,mvn编译的时候总是提示拉不到依赖,报错如下:

Could not validate integrity of download from http://0.0.0.0/...

因为使用HTTP协议下载依赖,可能会导致中间人攻击。

所以Maven 3.8.1就禁止了所有HTTP协议的Maven仓库,而IDEA2021.3.2使用了Maven 3.8.1

很多公司内部的maven仓库一般都是http协议,而Maven 3.8.1禁止了http协议,那么就会导致开头的报错。

标签:code,Java,Spring,代码,基础,Maven,spring,JAVA
From: https://www.cnblogs.com/epiphanyone/p/18593139

相关文章

  • Web004__PHP基础
    PhpStudy小皮面板(phpstudy)-让天下没有难配的服务器环境!下载小皮面板,小皮面板集成了Apache+Php+mysql等常见组合安装时选择自定义目录到D盘(任意)编辑器使用SublimeText(有破解版)或者notepad++(免费)搜索官网,或者一些博客、51破解官网声明:非不得已,不用破解版小皮......
  • 2024-2025-1 20241428 《计算机基础与程序设计》第十一周学习总结
    学期(如2024-2025-1)学号(如:20241428)《计算机基础与程序设计》第十一周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业的目标HTML,CSS,Javascript,计算机网络,网络拓扑,云计算作业正文https://i.cnblogs.com/posts/edit......
  • 图书管理系统|Java|SSM|JSP| 前后端分离
     【一】项目提供非常完整的源码注释【二】相关技术栈文档【三】源码讲解视频(收费)                     【其它服务】【一】可以提供远程部署安装,包扩环境【二】提供软件相关的安装包【三】如果需要提供java入门资料可咨询 ......
  • 网上报名管理系统|Java|SSM|VUE| 前后端分离
     【一】项目提供非常完整的源码注释【二】相关技术栈文档【三】源码讲解视频(收费)                     【其它服务】【一】可以提供远程部署安装,包扩环境【二】提供软件相关的安装包【三】如果需要提供java入门资料可咨询 ......
  • Android移动开发基础——广播
    在Android开发的世界里,广播(Broadcast)是极为重要的系统级通信机制,它就像一个无形的传声筒,让不同组件之间能够灵活地收发消息,不管是系统状态的变更通知,还是应用内部的自定义事件传达,广播都能派上用场。今天,就跟着我一步步拆解一个Android广播基础项目,深入理解广播的创建、注......
  • Android移动开发基础——Handler机制
    ⼀、Handler原理在Android中,Handler是⼀个重要的⼯具,主要⽤于在不同线程之间传递消息或执⾏任务,特别是从后台线程向主线程(UI线程)发送任务。Handler的⼯作原理依赖于Looper和MessageQueue,它们共同组成了Android的消息处理机制。⼆、Handler原理概述1、线程和消息......
  • springboot垃圾分类查询管理系统源码毕设+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着城市化进程的加速和居民生活水平的提高,垃圾产生量急剧增加,垃圾分类已成为城市管理中的重要一环。然而,由于垃圾分类知识的普及程度不一,许多居民在......
  • springboot基于SpringMVC的篮球俱乐部在线平台的设计与实现源码毕设+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网的飞速发展和人们健康意识的日益增强,篮球运动作为一种广受欢迎的体育活动,其参与度和影响力不断扩大。传统的篮球俱乐部管理方式逐渐暴露出......
  • 量子计算基础概念速览
    量子计算是一个跨越传统计算机科学与量子力学的前沿领域,它通过利用量子力学的原理来进行计算,极大地提高计算能力,尤其在解决一些经典计算机无法高效解决的问题时,展现出巨大的潜力。以下是量子计算的一些基础概念速览,帮助你快速理解这一复杂的领域。1.量子位(Qubit)传统计算机......
  • How do I download a file from FastAPI backend using JavaScript Fetch API in the
    题意:如何使用JavaScript的FetchAPI从FastAPI后端下载文件?问题背景:ThisismyFastAPI(python)code,whichreturnsa .ics file:这是我的FastAPI(Python)代码,它返回一个.ics文件:@app.get("/latLong/")asyncdefread_item(lat:float,long:float):mainF......