Spring

发布时间 2023-05-20 16:43:25作者: Gonfei

SPRING概述

Spring是一个开源的Java框架,它提供了一种轻量级的、非侵入式的开发方式,用于构建企业级应用程序和服务。Spring的目标是简化Java应用程序的开发,并提供一种灵活的编程模型。

Spring框架的核心特点包括:

  1. IoC容器(Inversion of Control,控制反转):IoC是Spring框架的核心概念之一,它通过将对象的创建和管理工作交给Spring容器来实现,开发人员只需声明对象的依赖关系,而不需要显式地创建和管理对象。这种解耦方式可以降低组件之间的耦合性,提高代码的可重用性和可测试性。

  2. 依赖注入(Dependency Injection,DI):依赖注入是IoC的一种实现方式,它通过将依赖对象注入到需要它的对象中,解决了对象之间的依赖关系。Spring框架通过注解或配置文件的方式实现依赖注入,使得对象之间的关系更加清晰和可配置。

  3. 面向切面编程(Aspect-Oriented Programming,AOP):AOP是一种编程范式,它可以将横切关注点(如日志记录、事务管理等)从主要业务逻辑中分离出来,提高了代码的模块化和可维护性。Spring框架提供了AOP的支持,开发人员可以使用切面来定义和管理横切关注点。

  4. Spring MVC:Spring MVC是Spring框架的一个模块,用于开发基于MVC(Model-View-Controller)模式的Web应用程序。它提供了一套灵活的Web开发框架,支持处理HTTP请求、路由、视图渲染等功能。

  5. 集成其他框架和技术:Spring框架可以与其他框架和技术(如Hibernate、MyBatis、JPA等)无缝集成,提供了丰富的API和配置选项,使得开发人员可以根据需求选择适合的组件和工具。

总的来说,Spring框架通过提供IoC容器、依赖注入、AOP和Web开发支持等功能,简化了Java应用程序的开发过程,并促进了代码的可维护性、可测试性和扩展性。它已经成为企业级Java应用程序开发的主流框架之一。

IOC容器

IOC概念

IOC(Inversion of Control,控制反转)容器是Spring框架的核心组件之一,它负责管理和组织应用程序中的对象(也称为Bean)。IOC容器通过控制对象的创建、配置和生命周期管理,将这些职责从应用程序代码中解耦出来。

在传统的开发模式中,开发人员通常需要手动创建和管理对象的依赖关系。但是在Spring框架中,IOC容器将这项工作交给了自己来完成。开发人员只需声明对象之间的依赖关系,而无需显式地创建和管理对象。

IOC容器的主要作用有:

  1. 对象的创建和管理:IOC容器负责创建对象实例,并管理它们的生命周期。开发人员只需声明对象的依赖关系,容器会负责根据配置信息实例化相应的对象。

  2. 依赖注入:IOC容器通过依赖注入(Dependency Injection,DI)将依赖对象注入到需要它的对象中。依赖注入可以通过构造函数、Setter方法或字段注入的方式实现。开发人员只需定义依赖关系,容器会负责将依赖对象注入到相应的位置。

  3. 对象的配置管理:IOC容器提供了灵活的配置方式,可以使用XML配置文件、注解或Java代码来描述对象的创建和依赖关系。通过配置管理,可以实现对象的灵活组装和切换,使得系统的配置更加可扩展和可配置。

  4. AOP集成:IOC容器与面向切面编程(AOP)密切相关。容器可以通过AOP的方式在对象的创建和管理过程中插入横切关注点,实现诸如事务管理、日志记录、安全性检查等通用功能。

在Spring框架中,有多个IOC容器的实现可供选择,其中最常用的是ApplicationContext。ApplicationContext是BeanFactory接口的一个实现,它提供了更多的功能和扩展,如国际化支持、事件发布、Web应用程序的特殊集成等。

通过使用IOC容器,开发人员可以实现解耦、可测试和可扩展的应用程序,提高代码的可维护性和可重用性。

IOC底层原理

  1. xml解析、工厂模式、反射

IOC(接口)

  1. IOC的思想基于IOC容器完成,IOC底层本质上就是对象工厂;
  2. Spring提供IOC容器实现的两种方式;(两个接口)
    • BeanFactory:IOC容器的基本实现,是Spring内部的使用接口,不提供开发人员进行使用。加载配置文件时不会创建对象,在获取对象才会创建对象。
    • ApplicationContext:BeanFactory的子接口,提供更多强大的功能,一般由开发人员使用。加载配置文件时就会把在配置文件对象进行创建。
  3. ApplicationContext接口实现类

    在Spring框架中,有多个ApplicationContext的实现类可供选择,每个实现类都针对不同的使用场景和环境提供了特定的功能和扩展。以下是几个常用的ApplicationContext实现类:

    1. ClassPathXmlApplicationContext:ClassPathXmlApplicationContext是从类路径下的XML配置文件加载ApplicationContext的实现类。它会在类路径下查找并加载指定的XML配置文件,根据配置文件中的定义创建和管理对象。这是最常用的ApplicationContext实现类之一。

    2. FileSystemXmlApplicationContext:FileSystemXmlApplicationContext是从文件系统中的XML配置文件加载ApplicationContext的实现类。它可以根据文件系统路径加载XML配置文件,并创建和管理对象。相比于ClassPathXmlApplicationContext,它更适合于在开发过程中指定具体的文件路径。

    3. XmlWebApplicationContext:XmlWebApplicationContext是在Web应用程序环境中使用的ApplicationContext实现类。它可以从Web应用程序的配置文件中加载ApplicationContext,提供了对Web特定功能的支持,如处理Servlet、监听器和过滤器等。

    4. AnnotationConfigApplicationContext:AnnotationConfigApplicationContext是基于Java配置的ApplicationContext实现类。它不使用XML配置文件,而是通过注解和Java类来定义Bean和配置信息。开发人员可以使用@Configuration和@Bean等注解来声明配置类和Bean定义,从而实现ApplicationContext的创建和管理。

    除了上述常用的实现类,Spring还提供了其他一些特定场景下的ApplicationContext实现类,如:

    • StaticApplicationContext:用于在静态环境下创建和管理ApplicationContext的实现类,适用于一些非常特殊的使用场景。

    • AnnotationConfigWebApplicationContext:用于在Web应用程序中使用基于注解的配置的ApplicationContext实现类,结合了XmlWebApplicationContext和AnnotationConfigApplicationContext的功能。

    这些ApplicationContext的实现类提供了不同的加载和配置方式,可以根据具体的需求选择合适的实现类来创建和管理Spring的ApplicationContext容器。

IOC操作Bean管理

1.什么是Bean管理
  • Bean管理指的是两个操作;
  • Spring 创建对象;
  • Spring 注入属性。
2.Bean管理操作有两种方式
  • 基于xml配置文件方式实现;
  • 基于注解方式实现;
3.IOC操作Bean管理(基于xml方式)

(1)基于xml方式创建对象

   <bean id="dao" class="com.kgh.demo.dao.book"></bean>
  • 在spring配置文件中,使用bean标签,标签里面添加对应的属性,就可以实现对象的创建;

  • 在bean标签有很多属性,介绍常用的属性;

    • id属性:唯一标识
    • name属性:类全路径
  • 创建对象时候,默认也是执行无参构造方法完成对象创建。

    (2)基于xml方式注入属性

  • DI:依赖注入,就是注入属性;

    (3)第一种注入方式

    使用set方法注入

    public class book {
        private String bname;
        private String bauthor;
    
    
        public void setBname(String bname) {
            this.bname = bname;
        }
    
        public void setBauthor(String bauthor) {
            this.bauthor = bauthor;
        }
    
        public static void main(String[] args) {
            book book = new book();
            book.setBauthor("罗贯中");
            book.setBname("三国演义");
        }
    }
    

    在spring配置文件配置对象创建,配置属性注入

        <bean id="dao" class="com.kgh.demo.dao.book">
            <property name="bname" value="三国演义"/>
            <property name="bauthor" value="罗贯中"/>
        </bean>
    

    (4)第二种注入方式,使用有参构造进行注入

        <bean id="dao" class="com.kgh.demo.dao.book">
            <constructor-arg index="0" value="三国演义"/>
            <constructor-arg index="1" value="罗贯中"/>
        </bean>
    

AOP

AOP概念

AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,旨在解决在应用程序中散布的横切关注点(Cross-cutting Concerns)的问题。横切关注点是那些不属于核心业务逻辑但在多个组件中存在的功能,例如日志记录、事务管理、安全性检查等。

AOP通过将横切关注点从主要业务逻辑中分离出来,提高了代码的模块化和可维护性。它通过定义切面(Aspect)来实现这一目标,切面可以独立地描述横切关注点,并将其应用到需要的组件中。

在AOP中,有几个核心概念:

  1. 切面(Aspect):切面是横切关注点的模块化单元,它包含了横切关注点的定义和逻辑。切面可以通过配置或编程的方式定义,并指定在哪些连接点(Join Point)上应用。

  2. 连接点(Join Point):连接点是在应用程序中可以插入切面的特定位置,例如方法的执行、异常抛出或字段的访问等。连接点是AOP中的可执行点,切面可以通过将其与特定的连接点关联来应用到相应的位置。

  3. 通知(Advice):通知是切面在连接点上执行的动作。在AOP中,有几种类型的通知,包括前置通知(Before Advice)、后置通知(After Advice)、异常通知(After Throwing Advice)、返回通知(After Returning Advice)和环绕通知(Around Advice)等。

  4. 切点(Pointcut):切点是一组连接点的集合,它定义了在哪些连接点上应用切面。切点可以使用表达式或模式来描述连接点的选择条件,以便精确地定位需要应用切面的位置。

  5. 增强(Introduction):增强是在不修改原始类的情况下,为类添加新的方法或属性。通过增强,切面可以为目标对象引入新的功能。

Spring框架提供了强大的AOP支持,可以与IOC容器无缝集成。开发人员可以使用注解或XML配置来定义切面和通知,并通过在Spring容器中配置AOP代理,实现切面的自动织入。

使用AOP,开发人员可以将横切关注点独立于核心业务逻辑进行管理,提高了代码的可重用性和可维护性。同时,AOP也使得系统的关注点更加清晰,易于理解和扩展。