
你知道 @Autowired 和 @Resource之间的区别吗?
前言
“面试造火箭,入职拧螺丝?” 别慌!这里没有“茴香豆的茴有几种写法”,只有最实用、最高频、最能唬住面试官的 Java 面试题解析!
正文
每日一题:你知道 @Autowired 和 @Resource之间的区别吗?
难度系数: ⭐
一、来源
二、注入方式
@Autowired:默认采用按类型(byType)的方式进行注入。也就是 Spring 会在容器中查找与被注入对象类型匹配的 Bean 来完成注入。要是存在多个匹配类型的 Bean,就会报错。不过可以结合 @Qualifier 注解按照名称(byName)来进一步指定要注入的 Bean,例如 @Qualifier(“userBizService2”)。
@ServicepublicclassUserService{ @Autowired private UserBizService userBizService;
// 若有多个 UserRepository 类型的 Bean,可使用 @Qualifier 按名称指定 @Autowired @Qualifier("userBizService2") private UserBizService userBizService;}@Resource:默认按照名称(byName)进行注入。Spring 会先依据属性名在容器中查找对应的 Bean,若找不到,再按类型(byType)查找。
@ServicepublicclassUserService{ @Resource private UserBizService userBizService;}三、属性设置
@Autowired:有 required 属性,其默认值为 true,表示注入的 Bean 必须存在,若不存在就会抛出异常。若将 required 属性设为 false,则当 Bean 不存在时不会报错,而是将注入的对象设为 null。
@ServicepublicclassUserService{ @Autowired(required=false) private UserBizService userBizService;}@Resource:有 name 和 type 两个重要属性。name 属性用于指定要注入的 Bean 的名称,type 属性用于指定要注入的 Bean 的类型。
@ServicepublicclassUserService{ @Resource(name = "userBizService", type = UserBizService.class) private UserBizService userBizService;}小结
4
📢 面试不是终点,而是技术成长的起点!持续关注本专栏,更多硬核内容在路上!
如果觉得有用,别忘了点赞+关注,你的支持是我更新的最大动力❤️
END