前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Springboot|@Autowired与@Resource的区别

Springboot|@Autowired与@Resource的区别

作者头像
DioxideCN
发布2022-08-05 19:24:50
2500
发布2022-08-05 19:24:50
举报
@Resource与@Autowired注解的区别

若定义存在两个Service业务逻辑:

代码语言:javascript
复制
@Service
public class MyServiceImpl01 implements MyService {
	@Override
	public void demo() {
		System.out.println("demo message 01");
	}
}
代码语言:javascript
复制
@Service
public class MyServiceImpl02 implements MyService {
	@Override
	public void demo() {
		System.out.println("demo message 02");
	}
}
代码语言:javascript
复制
@SpringBootApplication
public class Application implements CommandLineRunner {
	//默认通过名称进行注入
	//若名称不存在,则通过类型注入 -> 高驼峰检索
	@Resource
	private MyService myService;
}

此时,myService类不存在 -> 转为高驼峰命名法( MyService )进行Service业务逻辑层的检索( MyServiceImpl01MyServiceImpl02 )注入需要Bean的单例池模型,但发生多例重复Bean注入异常。

ERROR: expected single matching bean but found 2: myServiceImple01,myServiceImpl02

代码语言:javascript
复制
@SpringBootApplication
public class Application implements CommandLineRunner {
	//默认通过类型进行注入
	//若存在多个类型则通过名称进行注入
	//-> 通过名称注入myServiceImpl02
	@Autowired
	private MyService myServiceImpl02;
}

可以通过注解 @Primary@Qualifier 来指定注入某一个具体的业务逻辑:

代码语言:javascript
复制
@SpringBootApplication
public class Application implements CommandLineRunner {
	//通过Qualifier指定注入muServiceImpl02接口实现类
	@Autowired
	@Qualifier("myServiceImpl02")
	private MyService myService;
}

或在某一具体接口实现类上注入 @Primary 进行优先调用:

代码语言:javascript
复制
@Primary
@Service
public class MyServiceImpl01 implements MyService {
	@Override
	public void demo() {
		System.out.println("demo message 01");
	}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • @Resource与@Autowired注解的区别
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档