当前位置: 首页 > article >正文

IOC控制反转详解

IOC(控制反转)

@component的衍生注解

前面曾经提到,若想要把某个对象交给IOC容器管理,就需要在其声明上加上@Component注解。但是Spring中有三层架构,为了更加清晰的标注对象是属于哪一层的,提供了三个@Component的衍生注解:@Controller(标注在控制层)、@Service(标注在业务层)、@Repository(标注在数据访问层,但是因为该层和Mybatis进行整合,数据访问层一般使用@Mapper)。

Bean的名字

通过@Component以及其衍生注解,IOC容器中可能具有很多的bean对象,那么是如何进行区分的呢?——通过bean对象的名字,IOC容器中的每一个bean都有自己对应的名字:如果不进行指定,bean对象的默认名字就是类名小写。

 

通过跟进@Component的源代码发现其具有一个属性:value,我们可以通过value属性为其指定名字(IOC容器中的名字)

直接通过value属性修改名字:

再次运行服务,发现名字已经改变:

bean的名字是十分重要的,假如说一个UserService接口有多个实现类,直接进行依赖注入是不行的,无法知道应该注入哪个Bean,此时就需要使用类名来配合指定bean。

@ComponentScan组件扫描

一个类即使添加了@Component注解,也并不意味着其一定能够交给IOC容器管理,因为这些声明bean的注解想要生效,还需要进行组件扫描,@Component注解就可以进行组件扫描。这个注解虽然没有显式的进行配置,但是其包含在了SpringBoot的启动类注解@SpringBootApplication中:

@ComponentScan的默认扫描范围是启动类所在的包及其子包。超出这个范围的类,即使声明了@Component系列注解,由于@ComponentScan无法对其进行组件扫描,所以说也不能交给IOC容器管理,自然也不可以进行依赖注入了。

注意:在SpringBoot集成的web开发中,声明控制器(Controller)的bean只能使用Controller;声明bean的注解想要生效,就必须被@ComponentScan组件扫描扫描到,简单说来就是必须将其放在启动类所在的包及其子包中。


http://www.kler.cn/a/414491.html

相关文章:

  • 什么是串联谐振
  • FPGA实现GTP光口视频转USB3.0传输,基于FT601+Aurora 8b/10b编解码架构,提供3套工程源码和技术支持
  • C# 常量
  • nodejs相关知识介绍
  • Spring Boot【二】
  • Hbase2.2.7集群部署
  • Vue.js 中的样式绑定:动态控制你的样式
  • MAC 怎么终端怎么退出和进入Anaconda环境
  • React的基本知识:useEffect
  • 24/11/24 视觉笔记 滤镜
  • 如何评估爬虫获取的数据质量?
  • 扫雷-完整源码(C语言实现)
  • Excel中根据某列内容拆分为工作簿
  • Spring |(八)AOP配置管理
  • CA系统(file.h---申请认证的处理)
  • 图论2图的应用补充
  • 中信建投张青:从金融巨擘到公益大使的蜕变之旅
  • 08、Spring 集成MyBatis3.5
  • 【Linux】linux下一切皆文件 | 重定向 | 缓冲区与缓冲区
  • 软件测试面试之数据库部分
  • 基于 JNI + Rust 实现一种高性能 Excel 导出方案(上篇)
  • vmware中所有虚拟机都ping不通时解决方案
  • Vim 高级操作与技巧指南
  • 英语知识在线学习:Spring Boot网站设计
  • 宠物领养平台构建:SpringBoot技术路线图
  • 应用案例丨坤驰科技双通道触发采集实时FFT数据处理系统