【Spring】IOCDI

news/2024/9/21 14:37:50
  • 控制反转: Inversion Of Control,简称IOC。对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。

    对象的创建权由程序员主动创建转移到容器(由容器创建、管理对象)。这个容器称为:IOC容器或Spring容器

  • 依赖注入: Dependency Injection,简称DI。容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。

    程序运行时需要某个资源,此时容器就为其提供这个资源。

    例:EmpController程序运行时需要EmpService对象,Spring容器就为其提供并注入EmpService对象

IOC容器中创建、管理的对象,称之为:bean对象

思路:

  1. 删除Controller层、Service层中new对象的代码
  2. Service层及Dao层的实现类,交给IOC容器管理
  3. 为Controller及Service注入运行时依赖的对象
    • Controller程序中注入依赖的Service层对象
    • Service程序中注入依赖的Dao层对象

IOC详解

bean的声明

注解 说明 位置
@Controller @Component的衍生注解 标注在控制器类上
@Service @Component的衍生注解 标注在业务类上
@Repository @Component的衍生注解 标注在数据访问类上(由于与mybatis整合,用的少)
@Component 声明bean的基础注解 不属于以上三类时,用此注解

在IOC容器中,每一个Bean都有一个属于自己的名字,可以通过注解的value属性指定bean的名字。如果没有指定,默认为类名首字母小写。

组件扫描

  • 使用四大注解声明的bean,要想生效,还需要被组件扫描注解@ComponentScan扫描

@ComponentScan注解虽然没有显式配置,但是实际上已经包含在了引导类声明注解 @SpringBootApplication 中,默认扫描的范围是SpringBoot启动类所在包及其子包

手动添加@ComponentScan注解,指定要扫描的包

DI详解

@Autowired注解,默认是按照类型进行自动装配的(去IOC容器中找某个类型的对象,然后完成注入操作)

如果在IOC容器中,存在多个相同类型的bean对象,程序会报错
如何解决上述问题呢?Spring提供了以下几种解决方案:

  • @Primary

  • @Qualifier

  • @Resource

使用@Primary注解:当存在多个相同类型的Bean注入时,加上@Primary注解,来确定默认的实现。

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

  • @Qualifier注解不能单独使用,必须配合@Autowired使用

使用@Resource注解:是按照bean的名称进行注入。通过name属性指定要注入的bean的名称。

面试题 : @Autowird 与 @Resource的区别

  • @Autowired 是spring框架提供的注解,而@Resource是JDK提供的注解
  • @Autowired 默认是按照类型注入,而@Resource是按照名称注入

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

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

相关文章

LLM学习笔记

1. 评估榜单 1.1. C-Eval C-Eval 是一个全面的中文基础模型评估套件。它包含了13948个多项选择题,涵盖了52个不同的学科和四个难度级别。 https://cevalbenchmark.com/static/leaderboard_zh.html?ref=nav.6aiq.com 全部都是各个学科的选择题,例如:企业联合是指企业之间为增…

2024最新可用Adobe全家桶 Photoshop Mac直装版

现在网上的Mac版都无法使用了,原因是由于补丁更新的速度,没有跟上软件的发布版本,导致所有版本无法成功使用。这个是目前最完美版本,而且是直装版,不用任何折腾,点几下鼠标就可以安装完成使用了。 全家桶直装版包含: Adobe Illustrator、 Adobe Acrobat Pro DC、 Adobe …

OB_MYSQL UPDATE 优化案例

在工单系统上看到有一条SQL问题还没解决,直接联系这位同学看看是否需要帮忙。慢SQL:UPDATE A SET CORPORATION_NAME = (SELECT DISTINCT CORPORATION_NAMEFROM (SELECT CONTRACT_NO, COOP_SERVICE_TYPE, CORPORATION_NAME, PROJECT_NAME, ROW_NUMBER() OVER (PARTITION BY C…

转载使用inotify-tools监控文件夹或文件的变动

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.csdn.net/ywd1992/article/details/106251339文章目录 一、 前言什么是inotify和inotify-tools 检查系统是否支持inotify 二、安装使用inotify-tools 获取…

在 KubeSphere 上快速安装和使用 KDP 云原生数据平台

作者简介:金津,智领云高级研发经理,华中科技大学计算机系硕士。加入智领云 8 余年,长期从事云原生、容器化编排领域研发工作,主导了智领云自研的 BDOS 应用云平台、云原生大数据平台 KDP 等产品的开发,并在多个大规模项目中成功实施落地,在大规模容器化编排系统方向有丰…

【New Relic】给基于.NET Framework 4.0 的 exe 程序安装New Relic

由于.NET Framework 4.0 是比较古老的版本,只有New Relic 7.0以下的版本才会支持.NET Framework 4.0的引用程序。 Technical support for .NET Framework 4.0 or lower 你可以参考这个官方Install New Relic to Monitor your App的文档。1. 创建New Relic 账号 创建一个New R…

02-Excel初阶操作-学习笔记

数据透视表专题续 利用筛选字段切换数据场景:在数据透视表中显示各个所属地区每个月筛选出宠物用品类别,销售部门为三科的发生额,并在会议时展示,样例如下所示。具体操作step1:制作数据透视表 点击任意单元格——插入选项卡——数据透视表——将“订购日期”拖拽到行字段,…

开始预习数据库第四天中

你怎么知道我马上要考的数据库(4) 开始时间 2024-06-18 13:50:10 结束时间 2024-06-18 15:35:38 前言:中午休息结束,追上了一把十剪纸,但是确实打不过九吉星,主要是发财树搞钱太多了,实在打不过两张以上的三星五费。总结:去消社买饮料去,休息会,下半场复习数学建模,…