Spring IOC&DI

Spring IoC&DI Spring是什么?IoC&DI是什么?IoC和DI的使用 阅读详情

一、应用分层

三层架构(前后端分离,对于JAVA后端开发者的分层架构)

1)表现层:

展示数据结果,接受用户指令

Controller:控制层,对前端发送的请求进行处理,并给页面响应数据

2)业务逻辑层:

处理业务逻辑

Service:业务逻辑层

3)数据层:

存储和管理与应用程序相关的数据

Dao:数据访问层,持久层(增,删,改,查)

三层架构强调不同维度数据处理的高内聚和低耦合, 将交互界面, 业务处理和数据库操作的逻辑分开.

高内聚指的是⼀个模块中各个元素之间的联系的紧密程度, 低耦合指的是各个模块之间的紧密程度

浏览器发起请求, 先请求Controller, Controller接收到请求之后, 调用Service进行业务逻辑处理, Service再调⽤Dao 

二.IOC

Spring 是包含了众多工具方法的 IoC 容器,了Spring是⼀个开源框架

IOC控制反转(思想),Spring是一个控制反转的容器

在类上面添加 @RestController 和 @Controller 注解, 就是把这个对象交给Spring管理, Spring 框架启动时就会加载该类. 把对象交 给Spring管 理, 就是IoC思想.

当需要某个对象时, 传统开发模式中需要自己通过 new 创建对象, 现在不需要再进行创建, 把创建对象的任务交给容器, 程序中只需要依赖注入

获得依赖对象的过程的控制权被反转,把创建对象的任务交给容器,程序只需要注入依赖就可以

IOC程序解耦 将原来有自己当前类创建的下级类,改为传递方式(注入)下级类发生变化,当前类本身也无需修改,依赖对象的控制权不在由当前类控制,而是把依赖对象注入到当前对象中

我们只需要将原来由自己创建的下级类,改为传递的方式(也就是注入的方式),因为我们不 需要在当前类中创建下级类了,所以下级类即使发⽣变化(创建或减少参数),当前类本⾝也⽆需修 改任何代码,这样就完成了程序的解耦.

创建⼦类的⽅式,改为注⼊传递的⽅式

不再 是使⽤⽅对象创建并控制依赖对象了,⽽是把依赖对象注⼊将当前对象中,依赖对象的控制权不再由 当前类控制了

这样的话, 即使依赖类发⽣任何改变,当前类都是不受影响的,这就是典型的控制反转,也就是 IoC 的 实现思想

三、DI依赖

容器在运行期间,动态的为应用程序提供运行时所依赖的资源,(依赖注入)

DI是IOC的一种实现

Spring是一个IOC容器,两个基本功能(存,取)

Spring 容器 管理的主要是对象, 这些对象, 我们称之为"Bean". 我们把这些对象交由Spring管理, 由 Spring来负责对象的创建和销毁. 我们程序只需要告诉Spring, 哪些需要存, 以及如何从Spring中取出 对象

IoC控制反转,就是将对象的控制权交给Spring的IOC容器,由IOC容器创建及管理对 象。 也就是bean的存储.

依赖注⼊是⼀个过程,是指IoC容器在创建Bean时, 去提供运⾏时所依赖的资源,⽽资源指的就是对象.

1. Service层及Dao层的实现类,交给Spring管理: 使⽤注解: @Component 2. 在Controller层 和Service层 注⼊运⾏时依赖的对象: 使⽤注解 @Autowired

要把某个对象交给IOC容器管理,需要在类上添加⼀个注解: @Component ⽽Spring框架为了更好的服务web应⽤程序, 提供了更丰富的注解. 共有两类注解类型可以实现: 1. 类注解:@Controller、@Service、@Repository、@Component、@Configuration. 2. ⽅法注解:@Bean.

Spring bean是Spring框架在运⾏时管理的对象, Spring会给管理的对象起⼀个名字

@Controller:控制层, 接收请求, 对请求进⾏处理, 并进⾏响应. • @Servie:业务逻辑层, 处理具体的业务逻辑. • @Repository:数据访问层,也称为持久层. 负责数据访问操作 • @Configuration:配置层. 处理项⽬中的⼀些配置信息

@Controller , @Service 和 @Repository ⽤于更具体的⽤例(分别在控制层, 业务逻辑层, 持 久化层)

在 Spring 框架的设计中,⽅法注解 @Bean 要配合类注解才能将对象正常的存储到 Spring 容器中

 

定义多个对象

@Bean 可以针对同⼀个类, 定义多个对象

@Component
public class BeanConfig {
 @Bean
 public User user1(){
 User user = new User();
 user.setName("zhangsan");
 user.setAge(18);
 return user;
 }
@Bean
 public User user2(){
 User user = new User();
 user.setName("lisi");
 user.setAge(19);
 return user;
 }
}
根据方法名获取Bean对象
@SpringBootApplication
public class SpringIocDemoApplication {
 public static void main(String[] args) {
 //获取Spring上下⽂对象
 ApplicationContext context = SpringApplication.run(SpringIocDemoApplicatio.class, args);
 //根据bean名称, 从Spring上下⽂中获取对象
 User user1 = (User) context.getBean("user1");
 User user2 = (User) context.getBean("user2");
 System.out.println(user1);
 System.out.println(user2);
 }
}

 

 给对象进行重命名

@Bean(name = {"u1","user1"})

当存在多个相同类型的Bean注⼊时,加上@Primary注解,来确定默认的实现.

@Component
public class BeanConfig {
 @Primary //指定该bean为默认bean的实现
 @Bean("u1")
 public User user1(){
 User user = new User();
 user.setName("zhangsan");
 user.setAge(18);
 return user;
 }

使⽤@Qualifier注解:指定当前要注⼊的bean对象。 在@Qualifier的value属性中,指定注⼊的bean 的名称

@Controller
public class UserController {
 @Qualifier("user2") //指定bean名称
 @Autowired
 private User user;
}

@Resource注解:是按照bean的名称进⾏注⼊

@Controller
public class UserController {
 @Resource(name = "user2")
 private User user;
}

@Autowird 与 @Resource的区别 

@Autowired 是spring框架提供的注解,⽽@Resource是JDK提供的注解 • @Autowired 默认是按照类型注⼊,⽽@Resource是按照名称注⼊. 相⽐于 @Autowired 来说, @Resource ⽀持更多的参数设置,例如 name 设置,根据名称获取 Bean。

环境科研人必备:手把手教你用EPISuite 4.1批量预测化合物毒性(附ECOSAR实战) 本文详细介绍了EPISuite 4.1在环境毒理学研究中的应用,重点解析了ECOSAR模块的化合物毒性预测技术。通过批量处理实战和科研案例,帮助环境科研人员快速评估化学物质对水生生态系统的风险,提升工作效率。文章还涵盖了EPISuite核心模块的功能分类及ECOSAR模型的技术原理与算法特点。 阅读详情

相关推荐

java结合Ai

Spring AI 是 AI 工程的应用框架。其目标是将Spring生态系统的设计原则(如可移植性和模块化设计)应用于AI领域,并促进使用POJO作为应用程序的构建块到AI领域。特征跨 AI 提供商的可移植 API 支持,适用于聊天、文本到图像和嵌入模型。支持同步 API 和流 API 选项。还支持下拉以访问特定于模型的功能。聊天模型亚马逊基岩人类学Cohere的命令AI21 Labs的侏罗纪-2Meta 的 LLama亚马逊的泰坦人类学克劳德Azure 开放式 AI。

qq_67832732的博客 2848

spring IoC&DI

就是对象交给spring来创建 在上面加上Component的意思是,这个类可以交给spring自己来创建 现在service和dao都交给spring来创建了 怎么取出来呢 在成员上面加上Autowired,就可以让spring自己来创建了这样我们就不用new了 spring就帮我们new完了 如果没有new的话,就是null的 这样就可以运行了不加Component的话都启动不起来,因为没有加入spring 不加Autowired的话就会报错,因为为null有了controller,spring就会

ck的博客 880

软件工程导论实践:从需求到架构的机票预订系统全流程解析

本文深入解析机票预订系统从需求分析到架构设计的全流程实践,涵盖业务流程、功能建模、模块化设计、性能优化等关键环节。通过实际项目经验,分享软件工程导论在复杂系统开发中的应用技巧,包括数据流图绘制、E-R图设计、微服务架构及高并发处理等实战策略,助力开发者构建高效可靠的机票预订系统。

weixin_29202213的博客 412

【Spring】详解Spring IOC&DI

在前面中,我们讲解了Spring MVC是什么以及如何使用。那么本篇我们就来讲Spirng Framework,我们一般讲的Spring就指的是Spring Framework。在前面中,我们已经讲解了什么是Spring,IOC和AOP是Spring框架的核心思想。本篇我们主要讲IOC容器的使用。想了解什么是Spirng可以看这篇【Spring】什么是Spring?-优快云博客回顾一下IOC和DI。IOC(控制反转)是Spring框架中的核心思想。

zhyhgx的博客 2246

U24时钟信号上升下降沿出现非单调性--简单分析

交换机U24时钟信号上升下降沿出现非单调性--简单分析

qq_45185504的博客 1131

计算pi小数点后10000位

数据结构课上,老师让我们计算一下pi的10000位,复习一下面向对象。 First Try:定义一个高精度类hp(high precision),实现加减乘除,输入输出,然后随便找一个公式,比如Wallis公式,全都用hp进行计算。 现实是:大数乘大数或者大数除大数,实在是太慢了。而且Wallis公式收敛太慢。 Second Try先找到一个收敛较快的公司:BBP公式,观察公式发现,...

我的技术人生 7394

【Spring】Ioc&DI

在 Java 开发的世界里,Spring 框架无疑是一颗璀璨的巨星,而其中的控制反转(Inversion of Control,简称 Ioc)和依赖注入(Dependency Injection,简称 DI)更是其核心特性之一。今天,就让我们一起深入探索 Spring 中的 Ioc 和 DI。

2302_79806056的博客 4536

工业模型导入Unity实战:从ProE/SolidWorks到实时渲染的完整流程

在工业仿真、数字孪生和VR/AR应用开发中,将高精度工程模型导入实时渲染引擎是一个常见的技术挑战。其核心原理在于参数化工程软件与实时渲染引擎的数据结构差异:前者基于精确的B-rep边界表示和特征树,后者依赖轻量化的三角网格与材质贴图。这一转换的技术价值在于实现工程数据的可视化与交互化,为产品展示、虚拟培训和工厂仿真等应用场景提供基础。通过数据翻译与优化流程,特别是利用3ds Max或Blender作为中转站进行网格优化与UV展开,能够有效解决模型破面、材质丢失和性能问题。本文聚焦于ProE(Creo)和So

weixin_33050117的博客 344

Spring ioc&DI

我们上面说了五大类注解,但是类注解存在两个问题:1.如果我们使用外部包中的类,没办法添加类注解2.一个类,如果需要多个对象,那就需要用到我们的方法注解我们先来看如何去使用我们会发现报错了,找不到这个类型的bean,这是因为spring根本没有去看我们加载了@Bean注解的这个类,因为我们进程中有很多的类,有内部的有外部的,Spring不可能把所有的都加载一遍,所以他只会把添加了五大注解的类,存储到spring容器中我们发现为什么我这次使用了类注解,也报错了啊。

huapiaoy的博客 1873

分布式训练中All-Reduce、All-Gather、Reduce-Scatter原理

Reduce-Scatter = 先对所有进程的数据做 Reduce(如 sum / mean),再把结果“切分”分发给各进程。(是 Reduce + Scatter 的融合操作。

comli_cn的博客 340

100:vue+cesium: 加载glb文件,随机位置加载2000架飞机

本示例在 Vue + cesium 项目中随机位置加载2000架飞机,飞机是glb文件,每个大小为571kb。这个示例属于性能优化的范畴内,通常如果用entity加载glb只能显示几个飞机,这里采用primitive的方法来加载。直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果.

大剑师兰特的GIS世界 706
上一篇: Cookie和Session
下一篇: 动态规划/贪心算法
奈葵
博客等级 码龄4年 245粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值