Spring核心机制Ioc和Aop

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依赖,无需重复引入
    pom中添加spring依赖

lombok依赖:自动生成get/set方法,只需要在实体类前加@data注解即可,无需重复写get、set、toString、hashCode等方法
lombok引入注解

  • 不用Ioc容器创建对象:所有对象开发者自己创建,new 对象();这里思考一个问题,如果1个10个对象,那还可以实现手动创建,如果成百上千个对象呢,手动创建对象的效率大大降低;
    手动创建:
    手动创建对象

  • 使用Ioc:对象不用开发者创建,交给Spring框架完成
    两种方式创建:1.基于XML和基于注解(更多使用的是基于注解的方式进行对象的创建,springboot中已去掉呢基于xml的方式创建对象);
    详细介绍一下两种方式:
    1.基于xml的方式:开发者需要把对象在xml中进行配置,Spring框架读取这个配置文件,跟据配置文件的内容来创建对象,通过类反射获取对象
    xml文件
    因为没有对变量实例化赋值,所以运行时,值为null
    在这里插入图片描述
    在配置文件中,通过property标签对变量赋值,之后运行就有值了
    property赋值
    2.基于注解方式
    1>通过配置类
    用一个Java类来替代XML文件,把在xml中的配置放到配置类中;
    配置类注解:@Configuration
    通过@Bean注解,让spring去调用
    配置类
    通过加载注解获取bean内容
    contex.getBean默认获取的是注解类的方法名
    注解类中也可以自定义方法名:@Bean(value = “config”)
    2>扫包+注解
    扫包:
    配置类很多的时候,可以使用扫描配置类的包名的方式,加载所有的配置类
    扫包加载配置类
    更简单的方式,不再需要依赖于XML或者配置类,而是将bean的创建交给目标类,在目标类添加注解来创建
    @Component注解,将实体类加载到IOC容器中,进行读取
    @Component注解实现实体类注入ioc容器
    在目标类的变量上方添加@Value注解,实现值的注入
    在这里插入图片描述
    IOC自动创建对象,同时能完成依赖注入
    @Autowired:自动装载;将a实体的属性加载到b属性中
    在这里插入图片描述
    @Autowired默认通过byType方式注入
    使用@Qualifier实现通过byName方式注入
    在这里插入图片描述
    AOP:面向切面编程
    一种抽象化的面向对象编程,面向对象编程的补充,即将公共的代码抽象出去,同一进行处理;做到核心业务与非核心业务的解藕合
    引用切面依赖:
    aspect注解依赖
    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.使用
切面对象只能跟一个实现类生成代理对象,一对一的关系,如果有多个实现类则会
测试类功能实现

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值