Spring全家桶
WEB:SpringMvc、Spring Web Flux
持久层:Spring Data、Spring Data Redis、Spring Data MongoDB
安全校验:spring Security
构建工程脚手架:SpringBoot
微服务:SpringCloud
所有的Spring框架集成,都是基于Ioc与Aop的,如果没有Ioc与Aop,不会存在Spring系列框架;
- Ioc:Spring全家桶,各个功能模块的基础,创建对象的容器
- Aop:面向切面编程,抽象化的面向对象,基于Ioc实现的;将不影响业务的很多方法相似的位置的公共代码提取出来进行封装使用;业务实现:1、打印日志 2、事务 3 、权限处理
1.IOC
Ioc:控制反转,将对象的创建进行翻转,通常情况下,对象都是开发者手动创建,使用Ioc开发者不再需要创建对象,而是由Ioc容器根据需求自动创建项目所需要的对象
创建spring工程步骤:
1.pom.xml中引入spring的依赖:spring-context,该依赖中包含了spring-aop,spring-beans,spring-core等其他maven依赖,无需重复引入
lombok依赖:自动生成get/set方法,只需要在实体类前加@data注解即可,无需重复写get、set、toString、hashCode等方法
-
不用Ioc容器创建对象:所有对象开发者自己创建,new 对象();这里思考一个问题,如果1个10个对象,那还可以实现手动创建,如果成百上千个对象呢,手动创建对象的效率大大降低;
手动创建:
-
使用Ioc:对象不用开发者创建,交给Spring框架完成
两种方式创建:1.基于XML和基于注解(更多使用的是基于注解的方式进行对象的创建,springboot中已去掉呢基于xml的方式创建对象);
详细介绍一下两种方式:
1.基于xml的方式:开发者需要把对象在xml中进行配置,Spring框架读取这个配置文件,跟据配置文件的内容来创建对象,通过类反射获取对象
因为没有对变量实例化赋值,所以运行时,值为null
在配置文件中,通过property标签对变量赋值,之后运行就有值了
2.基于注解方式
1>通过配置类
用一个Java类来替代XML文件,把在xml中的配置放到配置类中;
配置类注解:@Configuration
通过@Bean注解,让spring去调用
contex.getBean默认获取的是注解类的方法名
注解类中也可以自定义方法名:@Bean(value = “config”)
2>扫包+注解
扫包:
配置类很多的时候,可以使用扫描配置类的包名的方式,加载所有的配置类
更简单的方式,不再需要依赖于XML或者配置类,而是将bean的创建交给目标类,在目标类添加注解来创建
@Component注解,将实体类加载到IOC容器中,进行读取
在目标类的变量上方添加@Value注解,实现值的注入
IOC自动创建对象,同时能完成依赖注入
@Autowired:自动装载;将a实体的属性加载到b属性中
@Autowired默认通过byType方式注入
使用@Qualifier实现通过byName方式注入
AOP:面向切面编程
一种抽象化的面向对象编程,面向对象编程的补充,即将公共的代码抽象出去,同一进行处理;做到核心业务与非核心业务的解藕合
引用切面依赖:
1.创建切面类,通过JoinPoint连接获取:joinPoint连接切面方法与参数
joinPoint.getSignature().getName():获取名称
joinPoint.getArgs():获取参数
@Aspect注解:切面对象注入注解
@Before在对象执行之前先执行切面对象内容
@AfterReturning在执行业务代码之后执行切面类,可以获取到返回值
@After注解在执行业务代码吗之后执行切面类,
@AfterThrowing:在方法异常返回后
@Around:对方法进行包裹2.创建实现类,实现类添加@Component注解
3.spring.xml中配置自动扫包即开启自动生成代理
<1--自动扫包-->
<context: component-scan base-package="com. southwind. aop">
</context: component-scan>
<!--开启自动生成代理-->
<aop: aspecti-autoproxy></aop: aspecti-autoproxy>
4.使用
切面对象只能跟一个实现类生成代理对象,一对一的关系,如果有多个实现类则会