Spring框架

一. Spring简介

1.1 什么是Spring

Spring是一个Java企业级应用的开源框架。主要用来开发Java应用,Spring的用途不仅限于服务器端的开发。它是一个容器框架,用来装javaBean(java对象),Spring是一个轻重级的控制反转(IoC)和面向切面(AOP)的容器框架
目的: 解决企业应用开发的复杂性

1.2 Spring的好处
  • 基于 POJO的轻量级和最小侵入性编程
  • 通过依赖注入(DI)和面向接口实现松耦合
  • 基于切面(AOP)和惯例进行声明式编程
  • 通过切面和模板减少样式代码

二. Bean容器

通过容器统一管理对象的生命周期
(1)减少对象创建、销毁的步骤,提高了效率
(2)可以统一管理对象之间的依赖关系

Bean配置项

  • scope:singleton(单例)和 prototype(原型)
  • 静态工厂方法
  • 实例工厂方法

singleton:单例方式,每个容器只有一份
prototype:平时new的方式,每次调用getBean() 都会得到一份新的bean

在这里插入图片描述

三. IoC 控制反转

bean对象从程序自行管理的方式,转变为Spring容器管理,控制权发生了反转
优势: 容器统一管理bean对象,对象解耦

四. DI 依赖注入

依赖注入,是IOC的一个方面,不用创建对象,而只需要描述他如何被创建,不在代码里面直接组装组件和服务,但是要在配置文件里描述哪些组件需要哪些服务,之后IOC容器负责组装
bean对象设置属性的依赖关系

注入方式:
1.属性注入
2.构造方法注入:构造器依赖注入通过容器触发一个类的构造器实现,该类有一系列的参数,每个参数代表一个对其他类的依赖

五. Bean、IoC、DI 的原理

反射和字节码技术

字节码技术:java编译为class字节码文件时,可以在生成的字节码中,注入自己的逻辑

六. Spring生命周期

  • Spring容器从 XML 文件中 读取 bean 的定义,并实例化bean
  • Spring根据 bean 的定义填充所有的属性
  • 如果 bean 实现了BeanNameAware 接口,Spring传递bean的ID到 setBeanName方法
  • 如果bean 实现了 BeanFactoryAware 接口,Spring传递beanfactory给 setBeanFactory 方法
  • 如果这个Bean已经实现了ApplicationContextAware接口,会调用setApplicationContext方法,传入Spring上下文
  • 如果bean关联了BeanPostProcessor接口,Spring会在postProcesserBeforeInitialization() 方法内调用它们
  • 如果Bean在Spring配置文件中配制了init-method属性会自动调用其配制的初始化方法
  • 当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean接口,会调用其实现的destroy方法
  • 最后如果Bean配制了destroy-method属性,会自动调用其配置的销毁方法

七、@SpringBootApplication

这个注解是Spring Boot项目的基石,创建Spring Boot项目之后会默认在主类加上
我们可以把这个注解看作是@Configuration@EnableAutoConfiguration@ComponentScan注解的集合
这三个注解的作用为:

  • @Configuration:允许Spring上下文中注册额外的Bean或导入其他配置类
  • @EnableAutoConfiguration:启动SpringBoot的自动配置机制
  • @ComponentScan:扫描@Component(@Service,@Controller)注解的bean,注解默认会扫描该类所在的包下的所有的类

八、Spring Bean相关的注解

8.1 @Autowired

自动导入对象到类中,被注入进的类同样要被Spring容器管理
比如:Service类注入到Controller类中

8.2 @Component@Repository@Service@Controller
  • @Component:通用的注解,可标注为任意类Spring的组件
  • @Repository:对用DAO层,数据库操作
  • @Service:对应服务层:涉及一些复杂的逻辑,需要用到DAO层
  • @Controller:对应SpringMVC控制层,主要用户接受用户请求并调用Service层返回数据给前端页面
  • @Configuration:设置配置类
  • @Bean:使用在方法上,表示注册一个名称为方法名的bean对象到容器中
8.3 Bean 的使用:装配、注入
  • @AutoWired:spring的注解
  • @Resource:jdk的注解,是一个规范,Spring是实现了这个规范
  • @Bean所在的方法,以方法参数进行注入
    如果是同一个类型Bean 注册了多个对象到容器中,装配时,指定Bean的名称
    (1)AutoWired+@Qualifier
    (2)@Resource(name = “bean的名称”)

九. Spring MVC

  • @Controller:类上使用,表示定义处理客户端请求的Bean
  • @RestController:和@Controller作用一样,但是所有方法都是默认有@ResponseBody的效果
9.1 响应相关的
  • @ResponseBody:返回的Content-Type响应头为application/ json
  • 不带@ResponseBody注解,需要返回字符串,表示静态资源路径

统一的异常处理:配置@ControllerAdvice+@ExceptionHandler统一拦截在Controller请求方法中抛出的异常
统一的拦截器:@Configuration+实现WebMvcConfigurer接口,处理的路径映射,只要匹配路径的请求,统一会调用拦截器方法

9.2 请求相关的
  • @RequestMapping:以使用在类、方法上,表示客户端请求的配置(包括uri、请求方法、数据类型)
  • @RequestParam获取请求数据
    在这里插入图片描述
    不加注解,默认就是@RequestParam
    类型可以是封装数据类型,自定义类型
    请求数据中,键和自定义类型属性匹配,和封装类型直接匹配
    接受url中的数据,x-www-form-urlencoded(表单默认的提交方式),form-data
  • 直接注入HttpServletRequestHttpServletResponse
  • @PathVariable:获取请求路径的变量

十. Spring AOP

  • 我们实现统一的业务功能,比如说日志处理、事务处理、访问权限的处理、统计时间的处理 我们可以使用AOP达到目地,这样就不用在每个业务代码里面都加这样的业务代码,只需在一处代码完成就可以了
  • 使用AOP的好处是 统一处理,不会侵入业务代码
    AOP的原理:
    在编译器以及运行期(即时编译),通过织入字节码的方式,生成原有类型的代理类
    AOP 的 类型:
    静态代理
    动态代理
    AOP 的实现方式:
    (1)JDK的方式:被代理类必须实现接口。基于InvocationHandle+Proxy生成代理类 动态代理
    (2)CGLIB的方式:被代理类不需要实现接口 动态代理
    (3)Aspectj的方式:静态代理
    Spring采取的是前两种方式
    Spring中的静态代理是自己封装的

十一. Mybatis

  • Hibernate 与 Mybatis的区别

Hibernate 是属于全自动ORM映射工具,使用Hibernate
查询关联对象或者关联集合时,可以根据对象关系模型直接获取,所以是全自动的
Mybatis 在查询关联对象或关联集合对象时,需要手动编写sql来完成,所以称为半自动ORM映射工具

  • 接口加上@Mapper注解,会通过Mybatis框架生成代理类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值