Java框架学习--Spring

news2024/11/17 3:44:47

1.Spring概念【托管很多对象的框架】

一个包含了众多工具方法的IoC容器

1.1 什么是容器?

    容器是用来容纳各种物品的(基本)装置。--来自百度百科

之前常见的容器有:

      List/Map-》数据存储容器

      Tomcat-》Web容器

1.2什么是IoC?

IoC=Inversion of Control翻译成中文就是“控制反转”的意思,也就是说Spring是一个“控制反转”的容器。

控制反转:对象的创建权反转给别人了

    比如:

    创建一个类,A类引用B类,B类引用C类,C类引用D类的时候直接在构造函数里面new,

会有一个问题,当一个构造方法发生变化的时候,整个调用链都要发生变化,不在new了,

而是把当前的对象传入进来,这个时候虽然整个调用链还是A调用B,B类引用C类,C类引用D类,但是当D发生变化的时候,CBA不需要进行代码修改,从而解决了代码的耦合性,也就是IOC

降低代码的耦合性。

基本功能:

        1.将对象存入容器。        

        2.从容器中取出对象。

1.3 DI概念说明

    DI=Dependency Injection,依赖注入。所谓以来注入就是由IoC容器在运行期间,动态的将某种以来关系注入到对象之中。所以,以来注入和控制反转是从不同的角度描述同一间事情,就是指通过引入IoC容器,利用依赖关系注入的方式,实现对象之间的解耦。

  从广义上来说IoC=DI,从不同维度来描述同一个问题。IoC是设计思想,DI是具体实现。

2.Spring概念【托管很多对象的框架】【单例+懒汉】

      1.创建maven项目

      2.添加Spring框架依赖(spring-context,spring-beans)

      3.创建启动类

2.1 Spring对象的存储

       1.先创建Bean对象

        2.将对象存入到bean中

        (a)在resources下创建一个spring配置文件

        (b)将bean对象配置到spring配置文件中

        3.从spring中读取到Bean对象

        (a)根据名称获取Bean

          (b)根据Bean类型获取Bean【容易出错:当Spring中存在相同的对象时,使用类型来获取Bean就会报错】

        (c)根据Bean名称+Bean类型获取Bean对象

获取Spring对象的两种方式:ApplicationContext和BeanFactory

相同点:

  • 都可以得到Spring上下文对象
  • 都是来自Spring的顶级接口

不同点:

继承关系和功能:ApplicationContext属于BeanFactory的子类:BeanFactory只有最基础访问Bean的能力,而ApplicationContext除了拥有BeanFactory功能之外,还包含了更多的功能:如国际化支持、资源访问、事件传播等。

ApplicationContext是一次性加载并初始化所有的Bean对象,所以在后面访问Bean对象时会很快。而BeanFactory是需要某个Bean对象时,采取加载Bean对象,所以他在执行Bean获取时,比较慢。

更加简单的讲对象存储到Spring中

3. 五大类注解

@Controller:控制器

@service:服务

@Respository:仓库

@Component:组件

@Configuration:配置

4.方法注解:@Bean-》将当前修饰方法的方法对象存储到Spring当中。

约定>配置

1.如果类名首字母是小写,要怎么从Spring中获取Bean?

    和首字母是大写的是一致的,都是用的将类名首字母小写的方式来获取对象

2.如果首字母和第二字母都是大写,会怎么样?

    当使用默认规则,首字母小写获取Bean对象时,会失败,正确获取Bean的方式是使用原类名,就能成功获取到了

3.项目中没有目录,所有的类都写在java根路径下,怎么存取Bean对象?

最佳方案:给项目创建合适的路径【配置根路径**加载比较慢,因为配置了根路径下所有的】

结论:当使用5大类注解的时,默认情况下获取Bean对象,只需要将类名的首字母小写即可;然而当Bean对象首字母和第二个字母都是大写的时候,此时需要使用原类名才能正确获取到Bean对象。

5.为什么需要五个类注解?

a)通过类注解可以了解当前类的用途(看到车牌 陕A 就知道这是西安的车一样)

b)功能由细微的不同

五大类注解的用途

程序的工程分层,调用流程如下所示:

1.@Controller(控制器):表示的是业务逻辑层,用来控制用户的行为,它用来检查用户此参数的有效性。

2.@Service(服务):归属于服务层,调用持久化类实现相应的功能。【不直接和数据库交互的,类似于控制中心】

3.@Repository(仓库):归属于持久层,是直接和数据库进行交互的。通常每一个表都会对应一个@Repository

4.@Configuration(配置):归属于配置层,是用来配置当前项目的一些信息。

5.Component(组件):归属于公共工具类。提供某些公共方法。

6.五大类注解的关系

@Component是除了@Component的所有类的父类。

存对象到Spring中实现方式2:

使用@Bean方法注解:将返回的对象存储到Spring中。

注意事项:@Bean注解一定要配合5大类注解一块使用,否则是无效的注解。

当给@Bean设置了name属性之后,使用原方法名就不能获取到对象了,只能使用设置的方法名

注入的三种方式:

@Autowired、@Resource

1.属性注入

优点:实现简单

缺点:

  • 不能注入不可变(final)的对象、
  • 只适用IoC容器、
  • 更容易违背单一设计原则

2.setter方法注入

优点:更加符合单一设计原则

缺点:

  • 不能注入不可变(final)的对象、
  • 注入对象可被修改【set方法是普通set方阿飞,可以被重复调用,在调用的时候就存在被修改的风险】

3.构造方法注入【当一个类中只有一个构造方法的手,可以省略@Autowired】

优点:

  • 可以注入不可变的对象
  • 注入的对象不会被修改

       a)加了final修饰符

       b)构造方法是随着类加载只执行一次的(不像set有可能执行多次被修改的)

  • 注入的对象会被完全初始化【使用构造方法带来的优点】
  • 通用性更好

缺点:没有属性注入简单

小结:日常开发中,使用属性注入实现更简单的读取Bean,依然是主流的实现方式。

@Autowired、@Resource的区别?

相同点:都是用来实现依赖注入的

不同点:

1.功能支持不同:

@Autowired支持属性注入,setter注入、构造方法注入

@Resource支持属性注入和setter注入,但不支持构造方法注入

2.出身不同:@Autowired来自Spring框架,@Resource来自JDK

3.参数支持不同:@Resource支持更多的参数设置,而@Autowired只支持required参数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/634603.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Docker】Docker对用户的应用程序使用容器技术遵循的五个步骤和GRSEC详细讲解(文末赠书)

前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 📕作者简介:热…

序列的有关知识

📢博客主页:盾山狂热粉的博客_CSDN博客-C、C语言,机器视觉领域博主📢努力努力再努力嗷~~~✨ 💡大纲 ⭕列表、元组、字符串都是序列,列表是可变序列,元组和字符串是不可变序列 一、跟序列相关的操作符 &am…

Hazel游戏引擎(008-009)事件系统

文中若有代码、术语等错误,欢迎指正 文章目录 008、事件系统-设计009、事件系统-自定义事件前言自定义事件类与使用声明与定义类代码包含头文件使用事件 事件调度器代码 C知识:FunctionBind用法function基本使用 012、事件系统-DemoLayer用EventDispache…

7-3 sdut-oop-6 计算各种图形的周长(多态)

定义接口或类 Shape,定义求周长的方法length()。 定义如下类,实现接口Shape或父类Shape的方法。 (1)三角形类Triangle (2)长方形类Rectangle (3)圆形类Circle等。 定义测试类Shap…

QT基础教程之一创建Qt项目

QT基础教程1创建Qt项目 根据模板创建 打开Qt Creator 界面选择 New Project或者选择菜单栏 【文件】-【新建文件或项目】菜单项 弹出New Project对话框,选择Qt Widgets Application 选择【Choose】按钮,弹出如下对话框 设置项目名称和路径,…

Cesium雷达追踪追踪(雷达探照效果)

Cesium雷达追踪追踪(圆锥体效果) 文章最后附有源码!!!!!!!!!!!!!!!!! 解析 第一步 、从gif图中可以看出,首先添加了两个运动的实体(在cesium entity与时间轴关联(添加运动轨迹))中有讲解 第二步、添加一个圆锥,修改圆锥朝向,来表示跟综照射效果,…

Windows安装MySQL及Python操作MySQL数据库脚本实例详解

1、Windows 上安装 MySQL 便于测试,笔者在 windows 上安装 MySQL,如有现成Linux下的MySQL和Python环境,也可直接使用。MySQL的官网下载链接安装步骤1)下载后的mysql-5.7.23-winx64.zip安装包解压至某一位置,在mysql-5.7.23-winx6…

Linux学习之用户管理useradd、userdel、passwd、usermod和chage

useradd 超级管理员root才能使用useradd 用户名添加用户,这条命令会新增一个用户,然后为新增用户在/home下新添一个用户名称相同的目录,在/var/spool/mail目录下添加一个用户名称相同的文件,而且还会在/etc/passwd、/etc/shadow和…

【Unity入门】25.入门结课Demo--神鸟大战怪兽

【Unity入门】入门结课Demo--神鸟大战怪兽 大家好,我是Lampard~~ 欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢 (一) 前言 经过了两个月的学习,我们也顺利的完成了入门课程,最后就用一个Demo作为我们的结课句号吧&am…

【夜深人静学数据结构与算法 | 第一篇】KMP算法

目录 前言: KMP算法简介: 引入概念: 前缀后缀 前缀表: 简单例子: 暴力遍历: KMP算法:​ KMP算法难点: 总结: 前言: 本篇我们将详细的从理论层面介绍一…

理解和创建Windows和Linux下的动态和静态库区别

一、引言 在计算机编程的世界中,库是一个非常重要的改变。它的出现提供了一种共享和重用代码的可能性,复杂的程序因为动态库的出现而变得简洁和方便。然而,库并不是单一的:它们可以是动态的,也可以是静态的&#xff0…

达梦数据库的下载与安装(Linux)

一、创建用户组 1、创建一个用户组和用户 添加分组 groupadd dinstall添加用户 useradd -g dinstall dmdba设置用户名和密码 echo "dameng123" | passwd --stdin dmdba查看操作系统中id为 dmdba 的用户的用户ID(uid)、组ID(gi…

web漏洞-逻辑越权之水平垂直越权全解(33)

他是业务逻辑层面,和一些业务方便应用的安全问题,这个是因为代码层面没用考虑到的逻辑关系所造成的安全问题,越权是其中一个比较关键的问题。登录是指在登录这里出现了安全问题,业务等等今天只说越权。 越权漏洞 分为水平和垂直…

容器镜像按层分析工具dive

概述 dive是一个容器镜像分析工具,可以直观的看到容器每一层变动了哪些文件,每一层占用的磁盘空间,这样也就可以看到镜像的历史构建过程;同时也可以看到镜像的磁盘空间使用率,面对特别大的镜像文件是,可以…

【论文随笔】Rewrite-Based Decomposition of Signal Temporal Logic Specifications

文章目录 Overview1 IntroLTL任务分解STL任务分解本文工作 Background and Problem DefinitionSTLAgent假设与问题方法 An STL Rewriting SystemRewriting SystemFormula Rewrite DAG Decomposing STL智能体编队任务分解最优分解 Exploring the Formula Rewrite DAG心得体会 多…

如何创建可引导的 macOS 安装介质

如何创建可引导的 macOS 安装介质 如何创建可引导的 macOS 安装器 | 如何制作 macOS USB 启动盘 请访问原文链接:https://sysin.org/blog/macos-createinstallmedia/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.or…

asp.net卷烟物价管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net卷烟物价管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言开发 asp.net卷烟物价管理系统VS开发sq…

清华青年AI自强作业hw3_2:前向传播和反向传播实战

清华青年AI自强作业hw3_2:前向传播和反向传播实战 实现过程各层参数维度分析拟合结果相关链接 一起学AI系列博客:目录索引 前向传播和反向传播的公式理解化用于作业hw3_2中::用NN网络拟合小姐姐喜好分类 完成前向传播、反向传播算…

【JavaEE进阶之Spring】一分钟让你学会什么是Spring以及如何使用创建Spring

前言: 💞💞今天我们正式进入到JavaEE进阶的学习中了,在JavaEE进阶的学习中,我们最主要的就是学习Spring框架。 💟💟那我们从今天就要逐渐从最基础的Spring开始,教会大家什么是Spring…

54、基于51单片机饮水机温度水位控制无线蓝牙APP控制报警系统设计(程序+原理图+PCB源文件+Proteus仿真+参考论文+开题报告+元器件清单等)

方案的选择 方案一:采用51单片机作为控制核心,配合无线蓝牙模块、水温加热模块继电器开关、基于Dallas单线数字式的DS18B20温度传感器模块、蜂鸣器报警模块、按键模块、LCD1602液晶显示器模块、晶振电路模块、复位电路模块以及电源模块为一体构成无线水…