一. 框架介绍
1.创建 独立的、生产级别的、基于Spring应用 更简单。2
2.提供了一种简洁的方式,最小化配置 和 第三方的库结合。-- starter。
二. 特性
1.独立的Spring应用。
2.嵌入式的tomcat、jetty、undertow,不用去部署war包。
3.starter,简化配置。
4.自动化的第三方库配置。
5.生产级别的,metrics, health check,其他配置。
6.没有代码生成,不需要xml配置。
三. Spring Boot与Spring MVC的区别
1.Spring Framework (Spring 框架)Spring Core、Spring Context,AOP,tx,MVC,数据库访问。
2.Spring MVC(Web支持)-- Spring Framework的一部分。
3.Spring Boot -- 和 Spring Framework、Spring Cloud 都是平级关系,没有包含关系。
四. Spring Boot初始化工具
1.进入官网https://start.spring.io/,配置下载即可
2.使用idea,步骤File -> new - Spring Initializr
关键步骤:
开发语言 Java、Maven。输入maven坐标。
选依赖
可以直接运行含有main方法的SpringBootDemoApplication,也可以mvn clean package 得到target目录下的jar包,通过java -jar xxx.jar 来运行,不依赖 tomcat、jetty等。
五. Spring Boot 配置文件
支持两种形式的配置文件:
application.properties -- 简单
application.yml -- 可以有层级结构
示例:
server:
port: 8081
login-url: http://127.0.0.1:8081/hello
com:
example:
demo:
account:
password: admin
username: 123456
六. Spring Boot WEB支持
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
七. Spring Boot AOP
加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
使用:
package com.example.demo.springboot.aop;
import java.lang.annotation.*;
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface Log {
}
package com.example.demo.springboot.aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class LogAspect {
@Pointcut("@within(com.example.demo.springboot.aop.Log) || @annotation(com.example.demo.springboot.aop.Log)")
public void pointcut() {
}
@Around("pointcut()")
public Object around(ProceedingJoinPoint point) throws Throwable {
long begin = System.currentTimeMillis();
Signature signature = point.getSignature();
Object[] args = point.getArgs();
try {
Object result = point.proceed();
long cost = System.currentTimeMillis() - begin;
System.out.println("signature: " + signature + " , args: " + args + " , result: " + result + ", cost:" + cost + "ms.");
return result;
} catch (Throwable e) {
long cost = System.currentTimeMillis() - begin;
System.out.println("signature: " + signature + " , args: " + args + " , error: " + e + ", cost:" + cost + "ms.");
throw e;
}
}
}