首页 > 其他分享 >Spring

Spring

时间:2023-05-20 16:44:48浏览次数:47  
标签:容器 配置文件 ApplicationContext Spring AOP IOC

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方法注入

    使用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>
    

    name属性注入

        <bean id="dao" class="com.kgh.demo.dao.book">
            <constructor-arg name="bname" value="三国演义"/>
            <constructor-arg name="bauthor" 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也使得系统的关注点更加清晰,易于理解和扩展。

标签:容器,配置文件,ApplicationContext,Spring,AOP,IOC
From: https://www.cnblogs.com/okup/p/17417428.html

相关文章

  • Jenkins 自动部署 SpringBoot
    Jenkins是流行的CI/DI工具。什么是CI/DI呢?CI/CD的核心概念可以总结为三点:持续集成持续交付持续部署简单来说就是将不同代码的分支合并到主分支,并自动进行打包,编译,测试,部署到生产环境的交付流程。 在这里用阿里云主机演示Jenkins自动部署SpringBoot项目。可以到阿里云官......
  • 什么是springboot&什么是spring
    1.什么是springbootspringboot是一个基于spring的开发框架,旨在简化sping应用的初始配置和开发过程。Springboot集成了对大部分目前流行的开发框架,使得开发者能够快速搭建spring项目。Springboot的核心设计思想是“约定优于配置”,基于这一原则,springboot极大地简化了项目和框架地......
  • springboot基于vue的MOBA类游戏攻略分享平台、游戏资讯分享平台,附源码+数据库+lw文档+
    1、项目介绍任何系统都要遵循系统设计的基本流程,本系统也不例外,同样需要经过市场调研,需求分析,概要设计,详细设计,编码,测试这些步骤,基于java语言设计并实现了MOBA类游戏攻略分享平台。该系统基于B/S即所谓浏览器/服务器模式,应用java技术,选择MySQL作为后台数据库。系统主要包括系统首......
  • Spring Boot |如何让你的 bean 在其他 bean 之前完成加载
    本文围绕SpringBoot中如何让你的bean在其他bean之前完成加载展开讨论。问题今天有个小伙伴给我出了一个难题:在SpringBoot中如何让自己的某个指定的Bean在其他Bean前完成被Spring加载?我听到这个问题的第一反应是,为什么会有这样奇怪的需求?Talkischeap,sho......
  • Spring Boot |如何让你的 bean 在其他 bean 之前完成加载
    本文围绕SpringBoot中如何让你的bean在其他bean之前完成加载展开讨论。问题今天有个小伙伴给我出了一个难题:在SpringBoot中如何让自己的某个指定的Bean在其他Bean前完成被Spring加载?我听到这个问题的第一反应是,为什么会有这样奇怪的需求?Talkischeap,sho......
  • Spring Data - Hibernate的配置
    //相当于sqlSessionFactoryBean这个类的配置@Bean(name="entityManagerFactory")publicLocalContainerEntityManagerFactoryBeanlocalContainerEntityManagerFactoryBean(DataSourcedataSource){LocalContainerEntityManagerFactoryBeanbean=new......
  • spring之AOP的概念及简单案例
    AOP概念AOP(AspectOrientedProgramming),即面向切面编程,可以说是OOP(ObjectOrientedProgramming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志......
  • springboot异常处理
    在SpringBoot中,我们可以使用@ControllerAdvice和@ExceptionHandler来处理系统错误异常。下面是一个简单的例子:@ControllerAdvicepublicclassGlobalExceptionHandler{@ExceptionHandler(Exception.class)publicResponseEntity<String>handleException(Exceptione......
  • java基于springboot+vue的漫画网站管理系统,附源码+数据库+lw文档+PPT,适合毕业设计、课
    1、项目介绍考虑到实际生活中在漫画网站方面的需要以及对该系统认真的分析,将系统权限按管理员和用户这两类涉及用户划分。(a)管理员;管理员使用本系统涉到的功能主要有:首页、个人中心、用户管理、漫画分类管理、漫画投稿管理、分类管理、排行榜管理、交流论坛、系统管理等功能......
  • SpringBoot处理日志
    SpringBoot处理日志工作需求需要把不同类的日志分开存储,方便查阅。例如Controller的日志存一个文件,Service的日志存一个文件。需求分析日志一般都用slf4j,意思为简单日志门面,它是把不同的日志系统的实现进行了具体的抽象化,只提供了统一的日志使用接口,使用时只需要按照其提供的......