理解SpringIOC和DI第一课(Spring的特点),IOC对应五大注解,ApplicationContext vs BeanFactory

Spring是一个包含众多工具等Ioc容器

对象这个词在Spring范围内,称为bean

Spring两大核心思想

1.IOC     (IOC是控制反转,意思是控制权反转-控制权(正常是谁用这个对象,谁去创建,)-控制对象的控制权,反转的意思是创建对象的控制权,交给了Spring)

优点:解耦合

高内聚:一个模块内部的关系

低耦合:各个模块之间前的关系

2.AOP

list/map装数据的容器

tomcat装的是web的容器

Spring容器,装的是对象

引入案列(为什么推荐用Spring)

上面代码的改动成本太大,耦合性太高

如果改成代码这种,传递的是对象,就直接给对象

不采用生成对象,而是你给我什么我就用什么这种,也就是你需要往里面(就像是下面这个图,在main中传递对象。)

IOC帮助我们做这个工作。

Spring可以帮助我们创建对象,可以往里面存,也可以从这个里面取,

我们要做的也就是1.告诉Spring,帮我们创建对象,2.知道如何取出来这些对象

DI是一种实现方式(依赖注入)

@Autowiredprivate BookService bookService;

假如说加上,上面的Autowired就相当于下面的这个意思

Autowired:告诉Spring,从容器中取出这个对象,赋值给当前对象的属性

 private BookService bookService;public BookController(){bookService=new BookService();}
@Component:告诉Spring,帮助我们存储对象。
@Component
public class BookService {@Autowiredprivate BookDao bookDao;
//    private BookService bookService;
//
//    public BookController(){
//        bookService=new BookService();
//    }public List<BookInfo> getBookList() {List<BookInfo> bookInfos = bookDao.mockData();for (BookInfo bookInfo : bookInfos) {if (bookInfo.getStatus() == 1) {bookInfo.setStatusCN("可借阅");} else {bookInfo.setStatusCN("不可借阅");}}return bookInfos;}
}

MVC提供了注解,前面的RequestMapping。

IOC(依赖对象的创建的控制权,存)一种思想,DI(依赖注入)是一种实现方式

DI是把依赖对象取出来,并且赋给该对象属性(取)

DI主要通过两类注解类型可以实现

IOC提供两类注解

1.类注解:@Controller,@Service,@Respository,@Component,@Configuration

2.方法注解:@Bean

package com.example.IOCtry;import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
//加上Controller才会不报错,假如不加上Controller就会报错
//@Controller
public class UserController {public void prin(){System.out.println("春节快乐");
}
}
package com.example.IOCtry;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;@SpringBootApplication
public class IoCtryApplication {public static void main(String[] args) {//启动类是帮助我们启动spring,这个命令可以返回一个spring//context上下文,就是spring一个运行环境ApplicationContext context=SpringApplication.run(IoCtryApplication.class, args);//从容器中拿对象UserController bean=context.getBean(UserController.class);//如果去掉Control注解,就会报错bean.prin();}}

会报这个错误,意思是说没哟拿到bean这个对象

下面这个是getBean的根据名称拿一个类(注意:这个的获取规范是小驼峰),注意这个返回的是一个Object,所以我们需要对他进行类型转换

第三种:根据名称和类名拿

 public static void main(String[] args) {//启动类是帮助我们启动spring,这个命令可以返回一个spring//context上下文,就是spring一个运行环境ApplicationContext context=SpringApplication.run(IoCtryApplication.class, args);//从容器中拿对象UserController bean=context.getBean(UserController.class);//如果去掉Control注解,就会报错bean.prin();UserService bean2=context.getBean(UserService.class);bean2.doService();UserService bean3=(UserService) context.getBean("userService");bean3.doService();//根据名称和类型获取beanUserService userService=context.getBean("userService",UserService.class);userService.doService();}}

⚠️特殊情况:假如类名前两位(第一位,第二位字母)都是大写的情况,bean的名称是类名

常见面试题ApplicationContext   vs      BeanFactory

获取bean对象,是父类BeanFactory提供的功能

继承关系和功能方面来说:Spring容器有两个顶级的接口:BeanFactory和ApplicationContext.其中BeanFactory提供基础的访问容器能力,而ApplicationContext属于是BeanFactory的子类,他除了继承了BeanFactory的所有功能之外,他还拥有独特的特性,国际化支持(中日韩等语言)资源访问支持,以及事件传播等方面的支持

从性能方面来说:ApplicationContext是一次性加载并初始化所有的Bean对象,而BeanFactory是需要哪个就去加载哪个,因此会更加清量(空间与时间)

@Service(服务存储)和下面使用方法一致
@Repository(仓库存储)和control使用方法一致
@Repository
public class UserRepository {public void doRepository() {//代码格式化快捷键,crtl+alt+lSystem.out.println("aini");}}
 UserRepository userRepository=context.getBean(UserRepository.class);userRepository.doRepository();
@Component(组件存储)和下面用法一致
@Configuration(配置存储)
//        UserRepository userRepository=context.getBean(UserRepository.class);
//        userRepository.doRepository();
//        UserComponent userComponent=context.getBean(UserComponent.class);
//        userComponent.doComponent();UserConfig userConfig=context.getBean(UserConfig.class);userConfig.doConfig();}
package com.example.IOCtry.config;import org.springframework.context.annotation.Configuration;@Configuration
public class UserConfig {public void doConfig(){System.out.println("我也是条狗");}
}
为什么要去分层,假如说都用一个注解不行吗?-这就跟车牌号一样,方便管理,也节约号码

常见面试题二

常用的注解有哪些?分别是什么作用

web url映射:@RequestMapping

参数接口和接口响应:@RequestParam,@RequestBody,@ResponseBody

Bean的存储:@Controller,@Service,@Repository,@Component,@Configuration,@Bean

Bean的获取:@Autowired,@Qualifier,@Resource

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

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

相关文章

轻量封装WebGPU渲染系统示例<41>- 前向渲染的雾(Fog)效果(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/FogTest.ts 当前示例运行效果: 此示例基于此渲染系统实现&#xff0c;当前示例TypeScript源码如下&#xff1a; export class FogTest {private mRscene new Rend…

优化你的计算机性能:如何根据 CPU 占用率决定硬件升级

优化你的计算机性能&#xff1a;如何根据 CPU 占用率决定硬件升级 一、引言二、CPU 占用率的意义与影响三、监测和评估 CPU 占用率四、判断硬件升级需求的依据五、硬件升级方案和建议六、总结 一、引言 计算机性能优化是提升计算机系统整体效能的过程&#xff0c;它对于用户和…

React立即更新DOM

正常情况下&#xff0c;react会等待set完毕后再进行页面渲染&#xff0c;所以在set时无法拿到更新后的dom import { useRef, useState } from "react"export default () > {const div useRef(null)const [count, setCount] useState(0)const btnClick () >…

各大期刊网址

AAAL: http://dblp.uni-trier.de/db/conf/aaai/ CVPR: http://dblp.uni-trier.de/db/conf/cvpr/ NeurlPS:http://dblp.uni-trier.de/db/conf/nips/ ICCV: http://dblp.uni-trier.de/db/conf/iccv/ IJCAL: http://dblp.uni-trier.de/db/conf/ijcal/ 并非原创引…

微机原理——定时器8253(8254)学习2应用与设计

目录 简要说明 用户扩展的定时计数器应用举例 1 8254作测量脉冲宽度 2 8254作定时 3 8254作分频 4 8254同时用作计数与定时 硬件设计 ​编辑软件设计 微机系统中定时计数器应用举例 5 计时器设计 硬件设计 软件设计 6 发生器设计 硬件设计 软件设计 简要说明 定…

LinuxBasicsForHackers笔记 --网络分析和管理

使用 ifconfig 分析网络 ifconfig – ifconfig 命令是用于检查活动网络接口并与之交互的最基本工具之一。只需在终端中输入 ifconfig 即可使用它来查询当前活动的网络连接。命令输出的顶部是第一个检测到的接口的名称。第二行包含当前分配给该网络接口的 IP 地址的信息&#x…

网上商城、宠物商城源码(Java)

javaWebjsp网上书城以及宠物商城源码&#xff0c;功能有购物车、收藏以及下单等等功能 带后台管理功能 运行示意图&#xff1a;

iOS 自动签名打包,并用脚本上传appstore

背景&#xff1a; 1&#xff09;测试环境给测试&#xff0c;产品&#xff0c;或者其他业务人员打测试包时&#xff0c;经常存在需要添加设备&#xff0c;不得不重新生成描述文件&#xff0c;手动去更新打包机描述文件配置 2&#xff09;证书&#xff0c;描述文件过期造成打包失…

STM32-SPI 中断

SPI协议 1.1 SPI总线介绍 SPI接口是Motorola &#xff08;motorola | Smartphones, Accessories & Smart Home Devices&#xff09;首先提出的全双工三线/四线同步串行外围接口采用主从模式&#xff08;Master Slave&#xff09;架构。 时钟由Master控制&#xff0c;在时钟…

垃圾回收与内存泄漏

前端面试大全JavaScript垃圾回收与内存泄漏 &#x1f31f;经典真题 &#x1f31f;什么是内存泄露 &#x1f31f;JavaScript 中的垃圾回收 &#x1f31f;标记清除 &#x1f31f;引用计数 &#x1f31f;真题解答 &#x1f31f;总结 &#x1f31f;经典真题 请介绍一下 Jav…

P7 链表 链表头前方插入新节点

目录 前言 01 链表头插入数据 示例代码 02 指定节点前方插入新节点 测试代码 前言 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《C》✨✨✨ &#x1f525; 推荐专栏2: 《 Linux C应用编程&#xff08;概念类&#xff09;_ChenPi的博客-CSDN博客》✨…

Web前端JS如何获取 Video/Audio 视音频声道(左右声道|多声道)、视音频轨道、音频流数据

写在前面&#xff1a; 根据Web项目开发需求&#xff0c;需要在H5页面中&#xff0c;通过点击视频列表页中的任意视频进入视频详情页&#xff0c;然后根据视频的链接地址&#xff0c;主要是 .mp4 文件格式&#xff0c;在进行播放时实时的显示该视频的音频轨道情况&#xff0c;并…

史上最全低代码平台盘点!三分钟盘点2023年顶尖二十个低代码平台!

史上最全低代码平台盘点&#xff01;三分钟盘点2023年顶尖二十个低代码平台&#xff01; 什么是低代码平台&#xff1f;2023年顶尖二十大低代码平台&#xff0c;哪个值得一试&#xff1f;低代码平台应该如何选择&#xff1f;本篇&#xff0c;我们将为大家盘点顶尖的十大低代码平…

分享一个简单的基于C语言嵌入式GUI界面切换代码

目录 前言 一、数据类型 二、页面调度 三、页面显示 四、视频展示 前言 最近在用LVGL写一个简单的UI界面&#xff0c;需要进行几个页面的切换&#xff0c;所以就自己写了一个简单页面切换代码&#xff0c;方便进行页面切换&#xff0c;同时使UI代码结构更加清晰。这个结构…

非常好的简历精选7篇

想要打造一份令人眼前一亮的简历&#xff0c;赢得招聘方的青睐&#xff1f;参考这7篇精选的“非常好的简历”案例&#xff01;无论是应届毕业生还是职场人士&#xff0c;都能从中借鉴灵感&#xff0c;提升简历质量。让求职之路更加顺畅&#xff0c;轻松斩获心仪职位&#xff01…

【java毕业设计源码】基于SSM框架的在线智能题库管理系统设计与实现

该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等学习内容。 目录 一、项目介绍&#xff1a; 二、文档学习资料&#xff1a; 三、模块截图&#xff1a; 四、开发技术与运行环境&#xff1a; 五、代码展示&#xff1a; 六、数据库表截图&#xff1a…

智能优化算法应用:基于入侵杂草算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于入侵杂草算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于入侵杂草算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.入侵杂草算法4.实验参数设定5.算法结果6.参考…

c# OpenCV安装(一)

一 通过NuGet 安装四个拓展包 OpenCvSharp4、OpenCvSharp4.Extensions、OpenCvSharp4.runtime.win、OpenCvSharp4.WpfExtensions C#使用OpenCV的一些代码 需要加头文件 using OpenCvSharp; //为了使用opencv using Point OpenCvSharp.Point; //为了确定我们使用的poin…

Android HCI日志分析案例1

案例1--蓝牙扫描设备过程分析 应用层发起搜索蓝牙设备&#xff0c;Android 官方提供的蓝牙扫描方式有三种&#xff0c;分别如下&#xff1a; BluetoothAdapter.startDiscovery(); //可以扫描经典蓝牙和BLE两种。BluetoothAdapter.startLeScan();//扫描低功耗蓝牙&#xff0c;…

数据领域建设的五大方向

1.数据技术的发力点 数据汇聚技术包括5G高速光纤ipv6下一代互联网、卫星互联网、叠加互联网、区块链、标识、编码和解析等&#xff1b;数据处理技术包括云计算、边缘计算、分布式计算、大数据处理、AI分析、绿色低碳、数据空间、隐私计算、区块链、数据脱敏、数据沙箱等&#…