它是Maven工程的基本工作单元,也是Maven的核心。它是一个XML文件,包含项目的基本信息,用于描述项目如何构建、声明项目依赖等。POM中通常有以下元素:
dependencies
在此元素下添加依赖,它可以包含多个依赖。
dependency
与之间有3个标识,分别如下:
scope
参数 | 描述 |
---|---|
compile | scope的默认值,表示被依赖项目需要参与当前项目的编译、测试、运行阶段,是一个比较强的依赖。打包时也要包含进去 |
provided | provided表示打包时可以不用打包进去,Web Container会提供。该依赖理论上可以参与编译、测试、运行等周期 |
runtime | 表示dependency不作用在编译阶段,但会作用在运行和测试阶段,如JDBC驱动适合运行和测试阶段 |
system | 和provided相似,但是在系统中要以外部JAR包的形式提供,Maven不会在repository中查找它 |
test | 表示dependency作用在测试阶段,不作用在运行阶段。只在测试阶段使用,用于编译和运行测试代码。不会随项目发布 |
properties
如果要使用自定义的变量,则可以在
元素中进行变量的定义,然后在其它节点中引用该变量。它的好处是:在依赖配置时引用变量,可以达到统一版本号的目的。
plugin
在创建Spring Boot项目时,默认提供了spring-boot-maven-plugin插件。它提供打包时需要的信息,将Spring Boot应用打包为可执行的JAR或WAR文件。
完整的pom.xml文件
Model(模式)、View(视图)、Controller(控制器)的简写。
Model:是JAVA的实体Bean,代表存取数据的对象或POJO(Plain Ordinary Java Objects,简单的Java对象),也可以带有逻辑。其作用是在内存中暂时存储数据,并在数据变化时更新控制器(如果要持久化,则需要把它写入数据库或者磁盘文件中)。
View:主要用来解析,处理、显示内容,并进行模板渲染。
Controller:主要用来处理视图中的响应。它决定如何调用Model(模型)的实体Bean、如何调用业务层的数据增加、删除、修改和查询等业务操作,以及如何将结果返给视图进行渲染。建议在控制器中尽量不让业务逻辑代码。
三层架构,就是将整个应用程序划分为表现层(UI)、业务逻辑层(Service)、数据访问层(DAO/Repository)。
@Controller标记在类上。使用@Controller标记的类表示是Spring MVC的Controller对象。分发处理器将会扫描使用了该注解的类,并检测其中的方法是否使用了注解@RequestMapping。注解@Controller只是定义了一个控制器类,使用了注解@RequestMapping的方法才是真正处理请求的处理器,完成映射关系。
@RestController是Spring 4.0之后才有的注解。它等价于原来的注解@Controller加上注解@ResonseBody的功能,直接返回字符串。用它来标注Rest风格的控制器类。
它用来处理请求地址映射的注解,可用在类或方法上。如果用在类上,则表示类中的所有响应请求的方法都以该地址作为父路径。
RequestMapping注解有6个属性
将请求URL中的模板变量映射到功能处理方法的参数上,即获取URL中的变量作为参数。
RequestMapping的method类型有GET、HEAD、POST、PUT、PATCH、DELETE、OPTIONS、TRACE。可以通过这些method来处理前端用不同方法提交的数据。
用GET方法可以获取资源。
如果需要删除一个数据,根据Restful风格则需要使用DELETE方法。在使用DELETE方法删除资源时,要注意判断是否成功,因为返回的是VOID方法。一般有以下三个方法进行判断:
如果需要添加对象,那一般使用POST方法传递一个Model对象。
如果对象需要更新,则用PUT方法发送请求。
PATCH是一个新引入的方法,是对PUT方法的补充,用来对已知资源进行局部更新。
该方法用于获取当前URL。若请求成功,则会在HTTP头中包含一个名为"Allow"的头,其值是所支持的方法,如值为“GET,POST”。它还允许客户端查看服务器的性能。如果遇到“500错误”,则OPTIONS不进行第二次请求。
它显示服务器收到的请求,主要用于测试或诊断。
AOP(Aspect Oriented Program,面向切面编程)把业务功能分为核心、非核心两部分。
在Spring的面向切面编程(AOP)思想里,非核心业务功能被定义为切面。核心业务功能和切面功能先被分别进行独立开发,然后把切面功能和核心业务功能”编织“在一起,这就是AOP。
是面向对象编程中的一种设计原则,意为控制反转(也被称为“控制反向”或“控制倒置”)。它将程序中创建的对象的控制权交给Spring框架来管理,以便降低计算机代码之间的耦合度。
依赖注入
IoC容器通过类型或名称等信息将不同对象注入不同属性中。组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。这是最流行的IoC方法。依赖注入主要有以下几种方法。
依赖查找
依赖查找则通过调用容器提供的回调接口和上下文环境来获取对象,在获取时需要提供相关的配置文件路径、key等信息来确定获取对象的状态。依赖查找通常有两个方法——依赖拖曳(DP)和上下文依赖查找(CDL)。
Servlet是在javax.servlet包中定义的一个接口。在开发Spring Boot应用程序时,使用Controller基本能解决大部分的功能需求。但有时也需要使用Servlet,比如实现拦截和监听功能。
在很多Web项目中,都会用到过滤器(Filter),如参数过来、防止SQL注入、防止页面攻击、空参数矫正、Token验证、Session、点击率统计等
在重写3个方法后,还可以进一步修改request参数使用的封装方法,如:
监听器(Listener)用于监听Web应用程序中某些对象或信息的创建、销毁、增加、修改、删除等动作,然后做出相应的响应处理。当对象的状态发生变化时,服务器自动调用监听器的方法,监听器常用于统计在线人数、在线用户、系统加载时的信息初始化等
Servlet中的监听器分为以下3三种类型
监听ServletContext、Request、Session作用域的创建和销毁
监听ServletContext、Request、Session作用域中属性的变化(增加、修改、删除)
监听HttpSession中对象状态的改变(被绑定、解除绑定、钝化、活化)
创建监听类
通过注解@WebListener标注此类是监听类
开启监听器Bean扫描
在入口类上,添加注解@ServletComponentScan
元注解就是定义注解的注解,是Java提供的用于定义注解基本注解
注解 | 说明 |
---|---|
@Retention | 是注解类,实现声明类Class,声明类别Category,声明扩展Extension |
@Target | 放在自定义注解的上边,表明该注解可以使用的范围 |
@Inherited | 允许子类继承父类的注解,在子类中可以获取使用父类的注解 |
@Documented | 表明这个注解是由Javadoc记录的 |
@interface | 用来自定义注释类型 |
该注解的作用是告诉Java将自定义的注解放在什么地方,比如类、方法、构造器、变量上等。它的值是一个枚举类型,有如下属性值
该注解用于说明自定义注解的生命周期,在注解中有三个生命周期
该注解是一个标记注解,表明被标注的类型是可以继承的。如果一个使用了@Inherited修饰的Annotation类型被用于一个Class,则这个Annotation将被用该Class的子类
该注解表示是否将注解信息添加在Java文档中
该注解用来声明一个注解,其中的每个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)。可以通过default来声明参数的默认值
定义注解格式见以下代码
public @interface 注解名 {定义体}