Spring6 思维导图

  • Spring6 思维导图

    • spring 介绍

      • Spring 是一个开源框架,为简化企业级开发而生

      • IOC(控制反转)和 AOP(面向切面)为思想内核

      • Spring6最低 JDK 版本直接跨越到 JDK17

      • Spring 体系结构

        • Core Container:Spring 核心模块
    • IOC 控制反转思想

      • 程序将创建对象的权利交给框架

      • Spring 实现 IOC

          1. 引入依赖

          2. 创建 POJO 类、Dao 类和接口

          3. 编写 XML 配置文件

            <bean id="studentDao" 
            	class="com.itbaizhan.dao.StudentDaoImpl">
            </bean>
            
        • 容器类型

        • 对象的创建方法

            1. 使用构造方法
              默认使用类的孔灿构造方法创建 bean

            2. 使用工厂类的方法

              1. 创建工厂类,工厂类提供创建对象的方法

                public class StudentDaoFactory {
                  public StudentDao getStudentDao(){
                    return new StudentDaoImpl(1);
                   }
                }
                
              2. 在配置文件中配置创建 bean 的方式为工厂方式
                相当于先创建对象 ---> 再去使用

                <!--  id:工厂对象的id,class:工厂类  -->
                <bean id="studentDaoFactory" class="com.itbaizhan.dao.StudentDaoFactory"></bean>
                <!--  id:bean对象的id,factory-bean:工厂对象的id,factory-method:工厂方法 -->
                <bean id="studentDao" factory-bean="studentDaoFactory" factory-method="getStudentDao"></bean>
                
            3. 使用工厂类的静态方法

              1. 在上方的工厂类中加上静态 tatic

              2. 配置 bean 方式为工程静态方法

                <!--用工厂类的静态方法创建对象  配置一个就可以了-->
                <bean id="studentDao" 
                class="com.yibeigen.dao.StudentDaoFactory2" 
                factory-method="getStudentDao">
                </bean>
                
          • 对象的创建策略
            有 5 种创建方法,<bean>​中的 scope 属性

              1. singleton:单例

                1. 整个项目只会创建一个对象

                2. 设置单例对象的创建时机

                  1. lazy-init="false"(默认)
                    立即创建
                    容器启动,创建所有
                  2. true:延迟创建
                    第一次使用了 bean 才会创建
              2. prototype:多例

                1. 每次从容器中获取时都会创建对象
              3. request:每次请求创建对象,web 中

              4. session:每次会话创建对象,web 中

              5. gloabal-session:一次集群环境的会话创建,web 中

      • 获取对象的方式

          1. 通过 id/name 获取
            <bean name / id ="studentDao" class="com.itbaizhan.dao.StudentDaoImpl2">

            StudentDao studentDao = (StudentDao) ac.getBean("studentDao");
            
          2. 通过类型获取

            1.  StudentDao studentDao2 = 
               ac.getBean(StudentDao.class);
              
          3. d/name + 通过类型 + 获取
            容器中有一个接口的多个实现类对象,则获取时会报错,此时需要使用类型 +id/name 获取

            1.  StudentDao studentDao2 = 
               ac.getBean("studentDao",StudentDao.class);
              
      • 对象的销毁时机

          1. singleton 单例

            1. 容器的销毁而销毁
          2. prototype 多例

            1. JAVA 垃圾回收机制销毁对象(因为多里的太多了)
          3. request

            1. 当处理请求结束,bean 实例将被销毁
          4. session

            1. 当 HTTP Session 最终被废弃的时候,bean 也会被销毁掉
          5. gloabal-session

            1. 集群环境下的 session 销毁,bean 实例也将被销毁
      • 对象的生命周期

        • init-method
          配置创建对象时执行的方法
        • destroy-method
          配置销毁对象时执行的方法
    • ID

      • ID 依赖注入

        • 它是 Spring控制反转思想的具体实现
        • 依赖注入是为对象的属性赋值
      • Setter 注入

        • setter 方法构造方法给属性赋值
          1. setter 方法

            1. 被注入类编写属性的 setter 方法
              方法名:set+ 属性名
            2. 给需要注入属性值的中设置
          2. 构造方法

            1. 注入属性值的中设置
      • 自动注入

        • 自动从容器中找到相应的bean对象设置为属性值
          • 全局配置

            • <beans>​中设置 default-autowire​属性,所有 bean 对象的自动注入策略
          • 局部配置

            • <bean>​中设置 autowire​属性,当前 bean 对象的自动注入策略

            • autowire 的取值

              • no:不会进行自动注入
              • byName:查找 id与属性名相同的 bean并进行注入,要 setter
              • byType:查找类型与属性类型相同的 bean,要 setter
              • constructor:查找 id 与属性名相同的 bean,要构造
          • 注入类型

            • bean 类型

              • /property>
            • 简单类型

            • 注入 List 集合、Set 集合

            • 注入对象类型 Map 集合

            • 注入 Properties 对象

              • 值 1
    • 注解实现 IOC

      • @Component

        • 用于创建对象,放入 Spring 容器,相当于 <bean id="" class="">

        • 注意

          • 要在配置文件中配置扫描的包,扫描到该注解才能生效

          • 默认 id 是首字母小写的类名

          • @Repository 用于 Dao 层
          • @Service 用于 Service 层
          • @Controller 用于 Controller 层 前后端交互,控制层
          • @Scope 指定 bean 的创建策略 (单例,还是多例等)

        • @Autowired

          • 代替 <bean> 中的依赖注入配置
        • @Qualifier

          • 在按照类型注入对象的基础上,再按照 bean 的 id 注入
          • 必须和 @Autowired 一起使用
        • @Value

          • 注入简单数据类型的属性值
          • @Value("${jdbc.username}"),获取 properties 文件
        • 配置完全的注解 IOC 开发

          • @Configuration

            • 表示配置类
          • @ComponentScan

            • 指定 spring 在初始化容器时扫描的包
          • @PropertySource

            • 代替配置文件中的 扫描配置文件
            • @PropertySource("classpath:db.properties")
        • @Bean

          • 方法的返回值对象放入 Spring 容器中
        • @Import

          • 可以为主配置类导入其他配置类
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    950 引用 • 1460 回帖 • 2 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖 • 2 关注
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 367 关注
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    6 引用 • 144 回帖
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    269 引用 • 666 回帖 • 1 关注
  • AWS
    11 引用 • 28 回帖 • 2 关注
  • 安装

    你若安好,便是晴天。

    134 引用 • 1184 回帖 • 2 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    695 引用 • 538 回帖 • 1 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    36 引用 • 35 回帖
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 236 关注
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 342 关注
  • 创业

    你比 99% 的人都优秀么?

    81 引用 • 1396 回帖 • 1 关注
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 63 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 475 关注
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    34 引用 • 333 回帖
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 121 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 191 关注
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 46 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    182 引用 • 400 回帖
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    43 引用 • 130 回帖 • 259 关注
  • abitmean

    有点意思就行了

    44 关注
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    52 引用 • 228 回帖
  • 电影

    这是一个不能说的秘密。

    125 引用 • 610 回帖
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    34 引用 • 37 回帖 • 565 关注
  • 音乐

    你听到信仰的声音了么?

    63 引用 • 513 回帖
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    293 引用 • 4496 回帖 • 687 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖