SSM框架-Spring框架核心知识梳理

 

目录

一、SpringIoC

1.1认识SpringIoC容器

1.2基于xml配置SpringIoC容器

1.3基于xml配置下Bean的生命周期和作用域

1.4 基于xml与注解配置SpringIoC容器

1.5 基于完全注解类配置SpringIoc容器

二、SpringAop面对切面编程

2.1认识SpringAop面向切面编程

2.2SpringAop基于注解配置

2.3通知注解

三、Spring-Tx事务

3.1Spring-Tx事务


Spring框架的核心内容分为三个部分

分别是SpringIoC容器、SpringAop面向切面编程、SpringTx事务。以下将分别介绍对应的核心内容的相关知识。


一、SpringIoC

1.1认识SpringIoC容器

原文:认识SpringIOC容器_Alphamilk的博客-CSDN博客

核心内容:

一、Spring Framework

  1. Spring Framework是一个开源的应用程序框架,由SpringSource公司开发,最初是为了解决企业级开发中的常见问题而创建的。它提供了丰富的功能,如依赖注入(DI)、面向切面编程(AOP)、声明式事务管理等,使得企业级应用程序的开发变得更加简单和快速。
  2. Spring Framework是Spring大家族中的基础实现,包括Spring Cloud、Spring MVC等技术都是建立在Spring Framework之上的。
  3. Spring Framework具有丰富的生态,模块化设计以及简化Java开发的优势。它不断创新和发展,引入新的特性和功能,满足不同场景下的需求。

二、Spring IOC容器

  1. Spring IOC容器是一种复杂容器,能够管理组件之间的依赖关系,并负责创建和销毁组件。与普通容器相比,它具有更多的功能和特性。
  2. 组件是能够重用的对象,比如在三层框架中,可以将三层架构拆分成三个组件。
  3. Spring管理组件的优势包括降低组件之间的耦合性、提高代码的可重用性和可维护性,方便配置和管理,并提供其他功能如AOP、事务管理等。
  4. SpringIOC容器的核心接口包括BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的扩展,提供了更多高级功能和特性。
  5. ApplicationContext有四个具体实现类,分别适用于不同的场景和配置方式,如ClassPathXmlApplicationContext、FileSystemXmlApplicationContext、AnnotationConfigApplicationContext和WebApplicationContext。

三、Spring IOC的核心功能

  1. Spring的核心功能是Spring IOC(控制反转)和DI(依赖注入)。
  2. 控制反转(IOC)是指将对象的创建和调用控制权从应用程序转移到容器中,由容器负责创建和管理对象,并通过依赖注入的方式将对象的依赖关系注入到应用程序中。
  3. 依赖注入(DI)是在组件之间传递依赖关系的过程中,将依赖关系的处理交给容器来完成,避免在应用程序代码中硬编码对象之间的依赖关系,实现对象之间的解耦。
  4. 依赖注入可以通过构造函数注入、Setter方法注入和接口注入三种形式实现,通过注解或XML配置文件进行配置。
  5. Spring的IOC容器和DI功能使得组件的管理和配置更加灵活、可重用和可维护,提高了代码的可测试性和可扩展性。

1.2基于xml配置SpringIoC容器

原文:基于XML实现SpringIoC配置_Alphamilk的博客-CSDN博客

核心

一、基于XML配置Spring IOC:

  1. 配置Spring IOC的jar包依赖。
  2. 编写XML配置文件,定义标签来表示组件,并配置组件的id和class属性。
  3. 实现组件的创建,包括无参构造方式创建、静态工厂创建和非静态工厂创建。

二、基于XML配置DI(依赖注入):

  1. 基于构造函数的DI,通过容器调用具有多个参数的构造函数来完成,可以使用单参数构造方法或多参数构造方法。

    • 单参数构造方法:在XML配置中使用来指定注入的对象。
    • 多参数构造方法:在XML配置中使用来指定注入的参数。
  2. 基于setter函数的DI,通过容器调用组件的setter方法来完成,可以使用来指定注入的属性值或引用。

三、创建ioc容器并获取组件

  1. 创建IoC容器:

    • 可以使用ApplicationContext接口的实现类,如ClassPathXmlApplicationContext,通过指定配置文件来创建容器对象。
    • 也可以先创建ApplicationContext的子类对象,再设置配置文件路径,并调用refresh()方法刷新容器。
  2. 通过容器获取组件的三种方式:

    • 第一种方式:使用getBean()方法和组件的ID获取组件,返回一个Object类型的对象,然后将其转换为对应的类型。
    • 第二种方式:使用getBean()方法同时指定组件的类型作为参数,直接返回对应的类型。
    • 第三种方式:根据组件的类型直接获取组件,无需指定组件的ID。

1.3基于xml配置下Bean的生命周期和作用域

原文:SpringIoC组件的高级特性_Alphamilk的博客-CSDN博客

 一、Bean的生命周期

  1. 生命周期 在对应的JavaBean类中创建相应的无参方法,并在配置标签中添加init-method和destroy-method属性。

示例:

二、Bean的作用域

  1. 作用域 首先介绍两种作用域:单例模式和多例模式。
  1. 单例模式(Singleton) - 默认 指的是在配置标签后,通过获取组件时只会获取到同一个对象。容器只会创建一个唯一的bean对象,不会再新建对象。

示例:

  1. 多例模式(Prototype) 在多例模式下,配置一个组件后,每次获取该组件时,容器都会创建一个新的对象。

示例:


1.4 基于xml与注解配置SpringIoC容器

原文:SpringIoC基于注解配置_Alphamilk的博客-CSDN博客

一、注解方式和扫描(IoC)

  • 注解方式是使用特定的注解来标记组件,例如@Component、@Repository、@Service、@Controller。
  • 扫描是指Spring容器自动扫描指定包下的组件,并将其实例化和管理起来。

二、配置文件介绍

  • 配置文件可以用于指定组件扫描的包,可以包含或排除特定的注解。
  • 普通配置可以直接指定要扫描的包。
  • 包含注解的配置可以指定包,并只扫描指定注解的组件。
  • 排除注解的配置可以指定包,并排除特定注解的组件。
  • 组件Bean的名称可以通过指定name属性来设置。

三、组件作用域和周期方法注解

  • 周期方法是在组件创建、销毁、初始化等不同生命周期阶段执行的方法。
  • 可以使用@PostConstruct注解在组件创建后执行初始化方法。
  • 可以使用@PreDestroy注解在组件销毁前执行清理方法。
  • Bean的作用域可以通过@Scope注解进行配置。

四、引用类型自动装配(DI)

  • 自动装配是指Spring容器自动将依赖注入到组件中。
  • 自动装配可以根据类型进行匹配,将符合类型的对象注入到组件中。
  • 自动装配的三种场景分别是byName、byType和构造函数自动装配。

五、基本类型属性赋值(DI)

  • 可以直接通过属性赋值来设置组件的基本类型属性。
  • 也可以使用@Value注解来进行属性赋值。

1.5 基于完全注解类配置SpringIoc容器

原文:基于配置类方式管理 Bean_Alphamilk的博客-CSDN博客

一、完全注解开发理解:

  • 完全注解配置是通过Java配置类和注解来替代XML配置文件。
  • 完全注解配置具有更强的类型安全性和可读性。

二、配置类和扫描注解:

  • 使用@Configuration标记一个类为配置类,用来定义Spring Bean和配置其他组件。
  • @PropertySource用于将外部属性文件加载到Spring环境中。
  • @ComponentScan用于指定要扫描的基础包,并将其下的类注册为Spring Bean。

三、通过AnnotationConfigApplicationContext创建IoC容器的两种方式:

  1. 直接创建AnnotationConfigApplicationContext并导入配置类。
  2. 创建AnnotationConfigApplicationContext实例后,调用register方法注册配置类。

四、@Bean定义组件:

  • @Bean用于声明一个方法生成一个由Spring管理的Bean。
  • 可以通过name/value属性指定Bean的名称。
  • 可以通过initMethod和destroyMethod属性指定Bean的自定义初始化和销毁方法。

五、@Bean注解的细节:

  • Bean的名称默认为方法名字,也可以通过@Bean(name="beanName")指定名称。
  • 可以通过在方法上使用@PostConstruct和@PreDestroy注解来定义Bean的初始化和销毁方法。
  • 可以通过@Bean的initMethod和destroyMethod属性指定Bean的初始化和销毁方法。
  • 可以通过@Scope注解指定Bean的作用域。

六、Bean组件之间的调用:

  • 可以直接调用其他Bean方法来获取对应的组件。
  • 也可以通过形参方式注入其他组件。

七、@Import扩展:

  • @Import可以将多个配置类整合成一个配置类。
  • 可以使用@ImportResource导入XML配置文件。

二、SpringAop面对切面编程

2.1认识SpringAop面向切面编程

原文:认识Spring AOP面向切面编程_Alphamilk的博客-CSDN博客

核心内容:

AOP(面向切面编程)是一种编程思维,用于解决OOP(面向对象编程)中非核心代码重复和难以维护的问题。AOP通过将横切关注点(如日志、事务、权限控制等)与业务逻辑分离,实现代码的清晰、简洁和易于维护。

AOP的核心概念包括:

  1. 切面(Aspect):封装与业务无关的公共行为,即横切关注点,便于代码重用和降低模块之间的耦合度。
  2. 通知(Advice):实现切面的具体功能,如前置通知、返回通知、异常通知、后置通知和环绕通知。
  3. 连接点(Joinpoint):被拦截到的方法,可以在方法执行前、执行后或抛出异常时应用通知。
  4. 切入点(Pointcut):定位连接点的表达式,指定被选中的连接点。
  5. 目标(Target):被代理的目标对象。
  6. 代理(Proxy):在目标对象上应用通知后生成的代理对象。
  7. 织入(Weaving):将通知应用到目标上,生成代理对象的过程。

Spring AOP框架是基于AOP编程思维的实现,封装了动态代理技术,简化了动态代理的实现过程。通过少量的配置,指定切入点和通知类型,即可实现面向切面的编程。Spring AOP可以应用于各种场景,如日志记录、事务处理、安全控制、性能监控、异常处理、缓存控制和动态代理等,提高代码的可维护性和重用性。


2.2SpringAop基于注解配置

原文:Spring AOP基于注解方式实现和细节_Alphamilk的博客-CSDN博客

一、Spring AOP底层技术:

  1. JDK动态代理:使用InvocationHandler接口实现代理,需要被代理的目标类必须实现接口。
  2. CGLIB动态代理:通过继承被代理的目标类实现代理,不需要目标类实现接口。
  3. AspectJ:早期的AOP框架,Spring AOP借用了AspectJ中的AOP注解。

二、AOP编程实现步骤:

  1. 使用注解配置:@Aspect将类标记为切面类,定义切面逻辑和增强方法的位置;@EnableAspectJAutoProxy开启AspectJ自动代理,启用Spring AOP功能。
  2. 导入相关依赖:包括Spring Aspects、Spring Context和Spring Test等。
  3. 定义增强方法:使用注解配置指定插入目标的位置,例如@Before、@After、@AfterReturning、@AfterThrowing和@Around等。
  4. 补全注解:将增强类加入到IOC容器中,并设置切面注解@Component和@Aspect。
  5. 开启AspectJ注解注释:在配置类中使用@EnableAspectJAutoProxy注解开启注解支持。

三、获取切点详细信息的方式:

  1. 使用JoinPoint接口:通过JoinPoint可以获取目标对象、目标对象的类、目标对象的简单类名、方法参数数组、方法签名等信息。
  2. 增强方法的参数:可以在增强方法中添加JoinPoint类型的参数,然后通过该参数获取目标对象的信息。

四、切点表达式语法: 切点表达式语法包括具体值和模糊值,可以用于定义切点的匹配规则。

五、切点表达式的重用:

  1. 在当前类中提取:使用@Pointcut注解声明一个空方法,并在方法上加上特定的切点表达式。其他增强方法可以通过调用该空方法来复用切点。
  2. 创建一个存储切点的类:创建一个单独的类用于存储切点,通过@Pointcut注解定义切点表达式。其他类中的增强方法可以通过引用该存储切点类的方法来复用切点。

2.3通知注解

原文:Spring Aop--通知注解_Alphamilk的博客-CSDN博客

一、环绕注解: 环绕注解(@Around)是Spring AOP中的一种通知类型,在目标方法执行前后进行环绕操作。它可以在方法调用前后增加额外的逻辑,例如日志记录、性能监控等。使用环绕注解需要创建ProceedingJoinPoint对象,并在方法内部通过该对象控制目标方法的执行流程。

优点:

  1. 灵活性高:可以在目标方法执行前后插入额外的逻辑代码,对方法的执行过程进行全面控制。
  2. 统一处理:将通用的逻辑代码抽取到切面中,实现统一的处理逻辑,避免在各个目标方法中重复编写相同的代码。
  3. 可以修改返回值:可以通过修改目标方法的返回值来影响最终的结果。

缺点:

  1. 复杂性增加:相对于其他类型的通知,使用环绕注解稍显复杂,需要更多的理解和掌握,特别是对于ProceedingJoinPoint的使用。
  2. 性能开销:因为环绕注解会包裹整个目标方法的执行流程,在某些情况下可能会带来一定的性能开销,特别是处理逻辑较为复杂的情况。
  3. 可能引入副作用:在环绕通知中对目标方法做任意修改时,需要谨慎操作,避免引入不可预料的副作用,导致程序出现异常或不正常的行为。

二、优先级注解: 优先级注解(@Order)是Spring框架中用于定义组件加载顺序的注解。可以用在类级别或方法级别上。多个组件实现了同一个接口或继承了同一个父类时,通过@Order注解可以指定它们的加载顺序。@Order值越小,优先级越高,具有更高的加载顺序。相同优先级的组件加载顺序是不确定的,最好将优先级设置为不同的值来避免不确定性。

使用@Order注解可以针对同一个方法有不同的增强,指定增强的执行顺序。


三、Spring-Tx事务

3.1Spring-Tx事务

原文:Spring-TX 事务_Alphamilk的博客-CSDN博客

核心内容

一、事务管理的种类:

  1. 编程式事务:手动编写代码管理事务,操作复杂。
  2. 声明式事务:通过注解或配置文件控制事务,代码简洁。

二、Spring事务管理器的使用:

  1. 接口:Spring事务管理器用于管理事务。
  2. 实现类:根据持久层框架选择合适的实现类。

三、事务注解的使用:

  1. 标记:用于标记需要事务管理的方法或类。
  2. 属性:包括只读模式、超时时间、指定异常和隔离级别。

四、事务属性的分类:

  1. 只读模式:限制事务是否只读。
  2. 超时时间:限制事务执行时间。
  3. 指定异常:指定事务回滚的异常类型。
  4. 隔离级别:定义事务的隔离级别。

五、事务的传播性属性:

  1. 定义事务之间的关系。
  2. 常用的属性有REQUIRED和REQUIRES_NEW。

你可能感兴趣的:(SSM框架,SpringBoot,spring,java,后端)