侧边栏壁纸
博主头像
Dioxide-CN博主等级

茶边话旧,看几许星迢露冕,从淮海南来。

  • 累计撰写 50 篇文章
  • 累计创建 49 个标签
  • 累计收到 21 条评论

目 录CONTENT

文章目录

Springboot|@Autowired与@Resource的区别

Dioxide-CN
2022-02-11 / 0 评论 / 4 点赞 / 130 阅读 / 1,205 字
温馨提示:
本文最后更新于 2022-04-20,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
@Resource与@Autowired注解的区别

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

@Service
public class MyServiceImpl01 implements MyService {
	@Override
	public void demo() {
		System.out.println("demo message 01");
	}
}
@Service
public class MyServiceImpl02 implements MyService {
	@Override
	public void demo() {
		System.out.println("demo message 02");
	}
}
@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

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

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

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

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

@Primary
@Service
public class MyServiceImpl01 implements MyService {
	@Override
	public void demo() {
		System.out.println("demo message 01");
	}
}
4

评论区