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

Spring中@Autowired@Resource和@Inject注解区别

首先说明ByType和ByName的区别:

ByType也就是当spring容器中只有一个Bean时,才会使用ByType,否则会报错

byName:根据属性名称来匹配Bean的名称进行自动装配。

@Autowired:来源于spring框架自身默认是byType自动装配,当配合了@Qualifier注解之后,

由@Qualifier实现byName装配。它有一个required属性,用于指定是否必须注入成功,默认为true。

package com.spring.service.impl;import com.spring.dao.AccountDao;
import com.spring.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;@Service("accountService")
public class AccountServiceImpl implements AccountService {@Autowired@Qualifier("accountDaoImplTwo")private AccountDao accountDao;@Overridepublic void saveAccount() {accountDao.saveAccount();}
}
package com.spring.dao.impl;import com.spring.dao.AccountDao;
import org.springframework.stereotype.Repository;@Repository
public class AccountDaoImplOne implements AccountDao {@Overridepublic void saveAccount() {System.out.println("one保存了账户信息");}
}

 

package com.spring.dao.impl;import com.spring.dao.AccountDao;
import org.springframework.stereotype.Repository;@Repository
public class AccountDaoImplTwo implements AccountDao {@Overridepublic void saveAccount() {System.out.println("two保存了账户信息");}
}

 测试类

import com.spring.service.AccountService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class Test {public static void main(String[] args) {AnnotationConfigApplicationContext ac=new AnnotationConfigApplicationContext("com.spring");AccountService accountService = ac.getBean("accountService",AccountService.class);accountService.saveAccount();}
}

调试结果


@Resource:在没有指定name属性时是byType自动装配,当指定了name属性之后,采用byName方式自动装配。
@Inject:可以配合@Qualifier或者@Primary注解使用。默认是采用byType装配,当指定@Named注解之后,变成byName装配。属性:无使用场景

在使用@Autowired注解的地方,都可以替换成@Inject。它也可以出现在方法上,构造函数上和字段上

@Autowired注解时spring的ioc容器中的特有注解,只能在spring框架中使用,但是@Inject注解没有特殊限制


http://www.mrgr.cn/news/70039.html

相关文章:

  • Rust面向对象特性
  • 【leetcode练习·二叉树】用「分解问题」思维解题 II
  • 【数据库】数据库设计
  • go语言 分布式一致
  • 微波无源器件 OMT1 一种用于倍频程接收机前端的十字转门四脊正交模耦合器(24-51GHz)
  • TCP连接如何保障数据传输安全
  • 【Java集合面试1】说说Java中的HashMap原理?
  • int socket(int domain,int type,int protocol);
  • 力扣第47题“全排列 II”
  • 中国智能网联汽车技术规程(C-ICAP-2024版)之基础行车辅助测试介绍及文档分享24年7月1号实施
  • 嵌入式linux中HDMI驱动操作方法
  • 前端面试题23 | 使用require和import引入的资源有什么区别?
  • 连锁会员管理系统开发的必要性
  • 【计网】基于TCP协议的Echo Server程序实现与多版本测试
  • MatSci-LLM ——潜力和挑战以及大规模语言模型在材料科学中的应用
  • CNN中每一层的权重是一样的么?
  • STM32的端口引脚的复用功能及重映射功能解析
  • 【数据结构】交换排序——冒泡排序 和 快速排序
  • 设计模式之责任链模式(Chain Of Responsibility)
  • Python——数列1/2,2/3,3/4,···,n/(n+1)···的一般项为Xn=n/(n+1),当n—>∞时,判断数列{Xn}是否收敛
  • 距离向量路由选择协议和链路状态路由选择协议介绍
  • 【电子通识】TINA-TI中怎么用分段线性源做周期性波形
  • redis集群介绍
  • 【SpringCloud】SpringBoot集成Swagger 常用Swagger注解
  • 丹摩征文活动|AIGC实践-基于丹摩算力和CogVideoX-2b实现文生视频
  • Vue3-06_路由