spring框架:负责宏观调控,负责整合其他的第三方的框架
SpringMVC框架: 主要负责前后端数据的交互
Mybatis框架/MybatisPlus框架:持久层框架,简化JDBC操作数据库的方式,提高效率
SpringBoot框架: 采用了更加简化的方式封装了之前的框架,让程序更简单
IOC介绍
IOC是一种控制反转的设计思想,由spring容器管理对象的生命周期,降低代码的耦合性。
将所有的对象都交给spring容器管理,容器负责对象的注入
DI介绍:Dependency Injection 依赖注入
spring容器替你管理一系列需要的类,前提是你需要将这些类表示交给容器进行管理才可,然后在你需要的时候不用自己去定义,容器就会自动帮你进行实例化
实现IOC思想需要DI进行注入。
注入的方式最常用的就是@Aurowired注解,只要加上注解即可,且如果对象是接口,会自动注入实现类。如果对象过多 可以使用@Qualifier("cat")注解进行选择特点的类。且必须与@Aurowired注解同时出现才能使用。
1.spring容器管理对象:
1.1 使用XML形式配置文件管理对象。基本不咋用,一般都是注解使用更方便
Bean 元素:使用该元素定义需要spring容器管理对象
id属性: 全局唯一变量一般类型首字母小写
class属性: class的路径信息,需要写全名
1.2 使用注解的形式进行配置管理的对象
@Bean 使用此注解进行标识是一个要提交给spring容器进行管理的对象
定义一个类,将类在配置类中进行注解@Bean 此方法还是自己进行了创建定义
1.3使用注解@component的形式进行配置管理对象(一般多用注解的形式)
@component定义在类上表示此类是一个提交给容器管理的对象。会自动实例化。
1.4使用@Controller @Service @Repository 形式进行配置管理对象,此方法降低了耦合度 每个表示不同的业务区域
2.定义spring配置类
2.1 一个完整的项目需要一个专门的配置类进行管理项目内容
使用@Configuration将一个类定义为配置类,此类中专门用来各种配置
使用@ComponentScan 配置需要扫描文件的路径,将使用了@Component注解的类自动实例化
配置类中可以添加其他需要的配置注释,前两个是必用的注释
3.创建spring容器,通过容器得到内容
DI依赖注入 面向接口
定义一个接口,进行实现类。使用注解@Autowired进行依赖注入。依赖注入如果是个接口,则会将实现类自动绑定到接口上进行使用。
当一个接口有多个实现类时们可以通过@Qualifier进行选择某个类
4.工厂模式
通过工厂模式进行创建对象(万能的)可以将抽象类进行容器注入,工厂模式需要实现类 FactoryBean<Calendar(日历)>
因为是实现类所有会自动重写 getObject() 和 getObjectType() 两种方法
getObject() 返回类型对象
getObjectType() 返回字节码
生命周期函数自动调用
@PostConsruct 初始化注解 会在执行时进行初始化
@PreDestroy 销毁注解
单例与多例的注解@Scope
懒加载@Lazy
懒加载只会在单例模式中有效,多例模式无效。多例模式默认就是懒加载
@Lazy在使用时才会创建对象。
当用户会需要一些特殊的拦截,并且这些链接创建的时间非常长时,可以时间懒加载。
AOP切面编程
高效创建代理对象,通过代理解决实际问题。
1.首先定义一个切面:使用注解@Aspect 标识为一个切面
再将切面提交给spring容器进行管理
2.在配置类中使用注解@EnableAspectJAutoProxy启动AOP
3.使用注解@Pointcut进行确定需要代理的对象
有四种方法进行确定代理的类
3.1使用bean方式 bean 指定单独的类,可以添加多个 xx,xx
3.2使用自定义注解的方式 @annotation 通过用户自定义注解进行判断
3.3使用包路径的方式 within 通过包路径进行筛选。
3.4使用方法名的方式 execution 通过 返回值类型 包名 类名 的方法 进行判断。
4.使用通知注解执行
常用通知有五种:
前置通知:@Before 在执行前输出
后置通知:@AfterReturning 在执行后一个输出
最终通知:@After 最后输出
异常通知:@AfterThrowing 报错异常输出
环绕通知:@Around 最常用!!可控制!! 前后都可以输出
5.注意事项:
当有两个或者多个AOP时,可以使用@Order注解进行排序输出!!
spring默认是JDK代理,想要更改为CGLIB代理 需要在启动注释中添加对应代码
SpringBoot默认使用的是CGLIB代理。如果需要更改为JDK代理则需要修改配置文件即可
MVC:是一种设计思想,降低代码的耦合性,是页面与后端的交互思想,层级代码结构,为了很好的实现MVC思想,所以后端代码也应该分层
View 视图层 Model业务层 Control控制层
分层说明:都可以直接提交给容器进行管理
1.控制层 Controller 与前端页面进行交互的 @Controller
2.业务层 Service 编辑业务逻辑 @Service
3.持久层 Mapper 实现数据库的相关操作 @Repository
MVC > 三层代码结构
与前端进行交互:前后的Axios交互
1.使用注解配置可以进行交互的内容
使用@Controller 注解交给容器管理
使用@ResponseBodt 将此类进行定义JSON转换
上俩个可以简化使用:@RestController注解 等于二合一的注解
使用@CrossOrigin 解决跨域的问题
2.定义网页端口号后的名字
使用注解@RequestMapping 默认为get 方法
方法类型有四种:
@GetMapping 限制为get方法
@DeleteMapping 限制为delete方法
@PostMapping 限制为post方法
@PutMapping 限制为put方法
Lombok 包 添加辣椒文件
关于Lomnok使用说明:
使用时需要添加jar包和安装插件 Linux服务器项目中 不需要添加
在编译器有效
定义封装的属性在前端进行输入
使用注解@Data 可以自动生成set get tostring 等方法
使用注解@AllArgsConstructor 添加全参构造
使用注解@NoArgsConstructor 添加无参构造
使用注解@Accessors(chain = true) 可以重写set方法 并且进行链式加载
以上为POJO文件标配注解 且必须进行实现类Serializable 序列化
3.在html中添加Axios文件。
并使用axios.get().then() 进行执行
SpringBoot 开箱即用原理:用少量配置实现大量的功能
SpringBoot为了简化程序的测试过程,springboot针对的测试方法开发了一个注解
@SPringbootTest注解
规则说明 :
当运行@Test注解表示的方式时,程序启动
Springboot启动,内部spring容器启动 基于IOC管理对象,DI注入对象
可以在任意的测试类中注入响应的对象
@Value 赋值
使用@PropertySource注解确认文件位置
定义properties文件 并将name属性赋值
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/>
</parent>
<groupId>com.lianlianpay</groupId>
<artifactId>LLP-ACCP-Java</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!-- 支付宝支付依赖-->
<!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java -->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.35.79.ALL</version>
</dependency>
<!--Swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<!--Swagger ui-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.11</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.10</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.29</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>
<!-- springboot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--thymeleaf 模板依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>