标签:01 Resource Autowired Spring bean Human public 注入
总结
@Autowired:先byType再byName
@Resource:先byName再byType(当指定@Resource name属性时,只会byName)
@Autowired是spring的注解
@Resource是Java提供的注解
说明
@Autowired的注入逻辑如下
找到所有类型符合的bean
如果没有类型符合的bean,则看@Autowired的required属性是否为true,是则抛出异常,否则返回null
如果只有一个,则将这个bean注入
如果有多个bean 4.1 选择其中带有Primary注解的bean,如果只有一个直接注入,如果有多个bean带有Primary注解则报错,如果不存在就下一步 4.2 选择其中优先级最高的bean(优先级使用javax.annotation.Priority表明),如果只有一个直接注入,如果有多个bean的优先级并列最高则报错,如果不存在就下一步 4.3 选择beanName和当前要注入的属性名相同的bean进行注入,有则注入,没有则报错
@Resource的注入逻辑如下
如果@Resource指定了name,则只会按照name进行查找,当找不到时抛出异常,找到将bean注入
如果@Resource没有指定name,则把属性名作为名字进行查找,找到将bean注入,当按照名字查找不到时,按照类型进行查找
举例
public interface Human {
String runMarathon();
}
@Service
public class Man implements Human {
public String runMarathon() {return "A man run marathon";}
}
@Service
public class Woman implements Human {
public String runMarathon() {return "An woman run marathon";}
}
@Autowired
@Service
@Primary
public class Man implements Human {
public String runMarathon() {return "A man run marathon";}
}
@Autowired
@Qualifier("woman")
private Human human;
}
@Resource
# 使用
@Resource(name="woman")
private Human human;
标签:01,Resource,Autowired,Spring,bean,Human,public,注入 来源: https://www.cnblogs.com/ysloong/p/15565410.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。