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协议,那么就会导致开头的报错。