springboot-bean

news/2025/11/10 10:38:40/文章来源:https://www.cnblogs.com/hanease/p/19206172

-------------------------------------------------------------------------------------------------------

@Autowired 是 Spring 框架中用于依赖注入(Dependency Injection, DI)的核心注解,用于自动装配 Bean 之间的依赖关系,减少手动配置的工作量。以下是其详细使用说明:

1. 作用与原理

  • 作用:自动将 Spring 容器中已存在的 Bean 注入到当前类的属性、构造方法或方法中,无需手动创建对象。
  • 原理:Spring 容器启动时,会扫描带有 @Autowired 的位置,根据类型(默认)或名称查找匹配的 Bean 并注入。

2. 使用位置

@Autowired 可用于 属性、构造方法、普通方法 上:

(1)属性注入(最常用)

直接在类的属性上添加 @Autowired,Spring 会自动注入匹配的 Bean:
java
 
运行
 
 
 
 
@Service
public class UserService {// 自动注入 UserDao 类型的 Bean@Autowiredprivate UserDao userDao;public void addUser() {userDao.insert(); // 直接使用注入的 userDao}
}
 

(2)构造方法注入(推荐,尤其适合必填依赖)

在构造方法上添加 @Autowired,Spring 会在创建当前 Bean 时,通过构造方法传入依赖的 Bean:
java
 
运行
 
 
 
 
@Service
public class UserService {private final UserDao userDao;// 构造方法注入(Spring 4.3+ 中,若类只有一个构造方法,@Autowired 可省略)@Autowiredpublic UserService(UserDao userDao) {this.userDao = userDao;}
}
 
  • 优势:依赖在对象创建时就已初始化,避免 NullPointerException;便于单元测试时手动传入依赖。

(3)方法注入(包括 setter 方法)

在普通方法(如 setter 方法)上添加 @Autowired,Spring 会在 Bean 初始化时调用该方法,并注入参数对应的 Bean:
java
 
运行
 
 
 
 
@Service
public class UserService {private UserDao userDao;// setter 方法注入@Autowiredpublic void setUserDao(UserDao userDao) {this.userDao = userDao;}// 普通方法注入(可注入多个参数)@Autowiredpublic void init(UserDao userDao, RoleDao roleDao) {this.userDao = userDao;// 处理 roleDao...}
}
 

3. 注入规则

(1)默认按类型(Type)匹配

@Autowired 默认根据属性 / 参数的类型在 Spring 容器中查找对应的 Bean。若容器中存在 唯一 匹配类型的 Bean,则直接注入。

(2)类型不唯一时的处理

若容器中存在 多个同类型 的 Bean(如多个 UserDao 实现类),会抛出 NoUniqueBeanDefinitionException。此时需结合以下方式指定具体 Bean:
  • @Qualifier 注解:通过 Bean 的名称(默认是类名首字母小写)指定注入的 Bean:
    java
     
    运行
     
     
     
     
    @Service
    public class UserService {// 注入名称为 "userDaoImpl" 的 Bean@Autowired@Qualifier("userDaoImpl")private UserDao userDao;
    }
    
     
     
  • @Primary 注解:在多个同类型 Bean 中,用 @Primary 标记一个 “首选” Bean,@Autowired 会优先注入它:
    java
     
    运行
     
     
     
     
    @Repository
    @Primary // 首选 Bean
    public class UserDaoImpl implements UserDao { ... }@Repository
    public class UserDaoOtherImpl implements UserDao { ... }// 此时 @Autowired 会注入 UserDaoImpl
    
     
     

(3)非必需依赖(允许为 null)

默认情况下,@Autowired 要求依赖必须存在,否则会抛出 NoSuchBeanDefinitionException。若允许依赖为 null,可添加 required = false
java
 
运行
 
 
 
 
@Autowired(required = false) // 若没有匹配的 Bean,注入 null
private UserDao userDao;
 

4. 注意事项

  • 注入的是 Spring 容器管理的 Bean:被注入的类必须被 Spring 管理(如添加 @Component@Service@Repository 等注解,或通过 XML 配置)。
  • 避免循环依赖:若 A 依赖 B,B 又依赖 A,会导致循环依赖。Spring 可解决构造方法以外的循环依赖,但应尽量避免设计上的循环依赖。
  • 与 @Resource 的区别:@Resource 是 JDK 自带注解,默认按名称匹配,而 @Autowired 默认按类型匹配(需结合 @Qualifier 按名称匹配)。
  • 静态属性无法注入:@Autowired 不能用于静态属性,因为 Spring 注入的是对象实例,而静态属性属于类。

总结

@Autowired 是 Spring 依赖注入的核心工具,通过自动装配减少了手动管理依赖的代码。实际开发中,推荐使用 构造方法注入(明确依赖关系,便于测试),并在必要时结合 @Qualifier 或 @Primary 处理复杂依赖场景。
 
@Autowired private OrganizationMapper organizationMapper;
你提供的代码片段是使用 @Autowired 注解对 OrganizationMapper 类型的属性进行依赖注入,这在 Spring 或 Spring Boot 项目中非常常见,尤其在整合 MyBatis 或 MyBatis-Plus 时(Mapper 接口通常用于数据库操作)。

这段代码的含义与注意事项:

  1. 作用告诉 Spring 容器:在初始化当前类(比如 Service 层的类)时,自动从容器中查找 OrganizationMapper 类型的 Bean,并注入到 organizationMapper 属性中,无需手动创建实例。
  2. 前提条件
    • OrganizationMapper 必须是一个被 Spring 管理的 Bean。
       
      在 MyBatis 中,通常通过 @Mapper 注解标记 Mapper 接口,或在配置类中使用 @MapperScan 扫描 Mapper 所在包,使 Spring 自动生成其实现类(代理对象)并纳入容器管理。
       
      例:
      java
       
      运行
       
       
       
       
      @Mapper // 标记为 MyBatis Mapper,Spring 会生成代理 Bean
      public interface OrganizationMapper {// 数据库操作方法...
      }
      
       
       
  3. 可能的问题与解决
    • 若启动时报错 No qualifying bean of type 'OrganizationMapper' available:原因通常是 OrganizationMapper 未被 Spring 扫描到(比如缺少 @Mapper 注解,或 @MapperScan 路径配置错误)。解决:检查 Mapper 接口是否添加 @Mapper,或确保 @MapperScan("com.xxx.mapper") 扫描路径正确。
    • 若存在多个 OrganizationMapper 类型的 Bean(极少出现,除非自定义了多个实现):需结合 @Qualifier 指定具体 Bean 的名称(默认是接口名首字母小写,即 organizationMapper)。

推荐写法

虽然属性注入简洁,但更推荐 构造方法注入(尤其在实际开发中),原因是:
  • 依赖在对象创建时就初始化,避免 NullPointerException
  • 明确显示类的依赖关系,便于代码维护和单元测试。
示例:
java
 
运行
 
 
 
 
@Service
public class OrganizationService {private final OrganizationMapper organizationMapper;// 构造方法注入(Spring 会自动传入容器中的 OrganizationMapper Bean)@Autowiredpublic OrganizationService(OrganizationMapper organizationMapper) {this.organizationMapper = organizationMapper;}// 使用 organizationMapper 进行数据库操作...
}
 
(注:Spring 4.3+ 中,若类只有一个构造方法,@Autowired 可省略)
 
@ComponentScan(basePackages = {"ptr.oa"}) 是什么意思
@ComponentScan(basePackages = {"ptr.oa"}) 是 Spring 框架中用于指定组件扫描路径的注解,其核心作用是告诉 Spring 容器:去 ptr.oa 包及其子包下扫描并加载所有标注了特定注解的类(如 @Component@Service@Controller@Repository 等),并将这些类实例化为 Bean 纳入 Spring 容器管理。

详细说明:

  1. 注解作用Spring 容器启动时,会根据 @ComponentScan 指定的路径,自动扫描符合条件的类(被 @Component 及其派生注解标记的类),并将它们注册为容器中的 Bean,后续可通过 @Autowired 等注解进行依赖注入。
  2. basePackages 参数
    • basePackages = {"ptr.oa"} 表示扫描的根路径为 ptr.oa 包。
    • 扫描范围包括 ptr.oa 包下的所有类,以及该包的所有子包(如 ptr.oa.serviceptr.oa.controllerptr.oa.mapper 等)。
    例如:
    • 若存在类 ptr.oa.service.UserService 并标注 @Service,会被扫描并注册为 Bean;
    • 若存在类 ptr.oa.controller.OrgController 并标注 @Controller,也会被扫描并注册为 Bean。
  3. 使用场景该注解通常配合 @Configuration 使用(标注在配置类上),用于手动指定 Spring 的组件扫描范围。例如:
    java
     
    运行
     
     
     
     
    @Configuration
    @ComponentScan(basePackages = {"ptr.oa"})
    public class AppConfig {// 其他配置...
    }
    
     
     
    在 Spring Boot 项目中,主启动类上的 @SpringBootApplication 已内置 @ComponentScan,默认扫描主类所在包及其子包。若需要自定义扫描路径,可通过 @ComponentScan 额外指定(如扩展扫描其他包)。

注意事项:

  • 若不指定 basePackages,默认扫描当前类所在的包及其子包。
  • 可指定多个路径,如 basePackages = {"ptr.oa", "ptr.common"},表示同时扫描两个包。
  • 路径支持通配符,如 basePackages = {"ptr.oa.*.service"}(但不推荐过度使用,以免扫描范围混乱)。
通过该注解,Spring 可以自动管理项目中的组件,减少手动配置 Bean 的工作量,是 Spring 依赖注入机制的重要基础。
 
@ConfigurationProperties 是一个bean么
@ConfigurationProperties 本身不是一个 Bean,它是 Spring Boot 提供的一个注解,用于将外部配置(如 application.propertiesapplication.yml 等)绑定到 Java 类的属性上,实现配置的自动注入。

关键说明:

  1. 注解的作用@ConfigurationProperties 的核心功能是 “属性绑定”:通过指定前缀(如 @ConfigurationProperties(prefix = "myapp")),将配置文件中以该前缀开头的配置项(如 myapp.name=xxx)自动映射到当前类的对应属性上。
    示例:
    java
     
    运行
     
     
     
     
    // 配置类(需被 Spring 管理才能生效)
    @Component // 或 @Configuration 等,使其成为 Bean
    @ConfigurationProperties(prefix = "myapp")
    public class MyAppConfig {private String name; // 绑定配置 myapp.nameprivate int port;    // 绑定配置 myapp.port// getter/setter 必须存在,否则无法绑定
    }
    
     
     
  2. 为何它不是 Bean
    • 注解本身只是一个 “标记”,告诉 Spring Boot 该类需要进行属性绑定,但其自身并不具备 Bean 的特性(如被 Spring 容器管理、可被注入等)。
    • 被 @ConfigurationProperties 标注的类需要额外通过 @Component@Configuration 或在配置类中用 @EnableConfigurationProperties 注册,才能成为 Spring 容器中的 Bean。
  3. 成为 Bean 的条件只有当被 @ConfigurationProperties 标注的类同时被 Spring 容器扫描并注册为 Bean 时,它才是一个 Bean。常见方式:
    • 类上添加 @Component(或其派生注解如 @Service 等),结合 @ComponentScan 扫描;
    • 在配置类中通过 @EnableConfigurationProperties(MyAppConfig.class) 显式注册。

总结:

@ConfigurationProperties 是用于属性绑定的注解,本身不是 Bean,但被它标注的类可以通过 Spring 的组件扫描或显式注册成为 Bean,从而实现配置与 Java 类的自动映射。

-------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------

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

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

相关文章

基于88 DCT变换的图像压缩MATLAB实现

将图像分割为88块,进行DCT变换、量化和压缩,最后重建图像并评估压缩效果。 function dctImageCompression(imagePath, quality)% 读取图像if nargin < 1imagePath = cameraman.tif; % 默认图像endif nargin < …

2025年热门的非膨胀型防火涂料厂家最新推荐权威榜

2025年热门的非膨胀型防火涂料厂家最新推荐权威榜行业背景与市场趋势随着建筑安全标准的不断提高和消防法规的日益严格,防火涂料行业迎来了快速发展期。据中国消防协会最新数据显示,2024年我国防火涂料市场规模已达到…

如何利用outlook大附件插件解决大文件传输难题?

在现代工作环境中,大文件传输常常是一个难题。Outlook大附件插件为用户提供了简便的解决方案,使他们能够轻松发送大型文件。该插件不受附件大小和数量的限制,用户只需通过简单的操作即可上传文件,无需进行压缩或分…

推荐一款专为APP而生的AI运动识别插件

引言: 今日为您推荐一款专门为开发AI运动APP,而量身打造的插件,可以用来开发快速AI运动计时、AI运动计数、AI健身、线上运动赛事、AI体育、AI体测、AI学生体测APP。在当今的开发领域,跨平台开发框架uni-app凭借其高…

信创浪潮下 2025ITSM 厂商选型核心指南:从能用到好用的智能价值升级

信创浪潮下 2025ITSM 厂商选型核心指南:从能用到好用的智能价值升级$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");文章对比主流ITSM产品信创适配与智能能…

检查SSD是否开启了trim

如今默认应该都是开启的,但检查下也没坏处。 $ cat /sys/block/nvme0n1/queue/discard_granularity 我这里是512;AI说非零值说明支持TRIM。 hdparm (包与命令同名)获取或设置 Linux SATA/IDE 驱动的设备参数。 可以…

2025年玻璃钢厂家权威推荐榜单:玻璃钢缠绕管道/一体化泵站/玻璃钢消防水池源头厂家精选

随着我国基础设施建设和环保产业持续推进,玻璃钢制品以其优异的性能在多个领域得到广泛应用。玻璃钢作为纤维增强塑料的俗称,具有轻质高强、耐腐蚀、使用寿命长等显著特点,正逐步替代部分传统材料。 在市政给排水领…

ubuntu24.04: 安装python 3.10.19

一,下载 $ wget https://www.python.org/ftp/python/3.10.19/Python-3.10.19.tar.xz 二,安装 解压: $ xz -d Python-3.10.19.tar.xz $ tar -xvf Python-3.10.19.tar 配置: # ./configure --prefix=/usr/local/soft…

2025年口碑好的活性炭空气过滤器厂家最新TOP实力排行

2025年口碑好的活性炭空气过滤器厂家最新TOP实力排行行业背景与市场趋势随着环境污染问题日益受到关注,空气净化行业迎来了快速发展期。据中国环境保护产业协会最新数据显示,2024年中国空气净化设备市场规模已达到58…

大文件跨国传输怎么合规,确保安全与高效的解决方案

大文件跨国传输已经成为企业运营的常态,但合规性是保证安全和信誉的关键。在进行传输前,企业需对各国的数据保护法律有深入理解,以确保遵循相关规定。同时,选择合适的技术和工具,如高效的数据加密和合规的传输渠道…

AtCoder Beginner Contest 431 题解

只写了 A-F。A 想让 \(x < y\) 变成 \(x \ge y\) 的最小 \(\Delta\) 当且仅当 \(x = y\) 取到,所以 \(\Delta = \max(0, y - x)\)。 code B 直接模拟,记 vs[x] 表示编号为 \(x\) 的部件是否被使用过即可。 code C…

2025年轻钢龙骨厂家权威推荐榜单:龙骨/卡式龙骨/隔墙龙骨源头厂家精选

在建筑工业化与绿色建造理念的深度融合下,轻钢龙骨作为装配式建筑的核心支撑材料,其市场需求持续增长。行业数据显示,2023年全球轻钢龙骨市场规模已达187亿美元,预计2025年将突破210亿美元,年复合增长率稳定在6.2…

常见的跨网文件安全交换系统解析及应用指南

在当今企业信息化发展的背景下,跨网文件安全交换系统变得尤为重要。这类系统能够支持在不同网络之间安全交换文件,保障数据的机密性与完整性。通常,这些系统具备加密传输、身份认证及权限控制等多重安全机制,有效防…

摄影提示词

一 角色 你是使用现代全画幅微单相机进行女性人性摄影的专家,擅长年轻女性人像摄影的构图和审美 拍摄环境 1.舞台 有一个铺着棕色实木地板,金棕色的舞台背景,灯光较为明亮,柔和 2.希腊式弯拱门 一个中型希腊式大理…

2025年比较好的蛇形帘厂家推荐及采购参考

2025年比较好的蛇形帘厂家推荐及采购参考行业背景与市场趋势随着现代建筑设计的不断演进和消费者对家居智能化需求的提升,蛇形帘(又称波形帘)作为窗帘行业的重要创新产品,近年来呈现出快速增长的态势。根据中国建筑…

2025年靠谱的高定全品类五金厂家最新权威实力榜

2025年靠谱的高定全品类五金厂家最新权威实力榜行业背景与市场趋势五金行业作为制造业的基础支撑,近年来随着全球建筑装修市场的持续增长而蓬勃发展。据中国五金制品协会最新数据显示,2024年中国五金行业市场规模已达…

firewalld防火墙关闭后telnet仍然不通的原因

上周部署的时候,机器上的防火墙关闭(firewalld)但是telnet端口却不通,但是把防火墙打开以后配置对应iptables规则就可以通了。 原因: 这是因为防火墙即便关闭,之前加载过得内核过滤规则仍然存在,同时系统默认规则…

2025年11月北京律师推荐排名榜:行业白皮书视角下的十位优质律师

在北京,找律师往往意味着时间紧、标的额高、情绪重。企业主担心合规漏洞被放大,个人担心房产、婚姻、刑案一步走错满盘皆输。北京市司法局2024年行业白皮书显示,北京执业律师已突破5.2万人,律所超3200家,年收案量…

2025年质量好的冰雕施工厂家推荐及选择参考

2025年质量好的冰雕施工厂家推荐及选择参考行业背景与市场趋势冰雕艺术作为冬季景观的重要组成部分,近年来随着文旅产业的蓬勃发展而持续升温。根据中国冰雪产业研究院最新发布的《2024-2025中国冰雪艺术市场分析报告…

2025年北京生态原产地保护产品认证机构权威推荐榜单:生态原产地保护产品认证证书/生态原产地保护产品认证管理办法/生态原产地保护产品认证办理时长源头机构精选。

生态原产地保护产品(PEOP)认证,正成为中国企业提升产品附加值、突破国际贸易壁垒的一张重要“绿色护照”。 生态原产地产品保护制度是中国于2012年首创的认证体系,旨在通过绿色环保、低碳节能、资源节约的严格要求…