掌握这些注解是如何工作的 @Autowired @Value @Qulifier @Lazy @Resource 以及泛型注入
只关注日常开发中的主流程
org.springframework.beans.factory.support.DefaultListableBeanFactory#resolveDependency
基于 DependencyDescriptor 获取参数类型和名字
判断字段或者参数上有没有@Lazy ,如果有则返回一个代理对象
org.springframework.beans.factory.support.DefaultListableBeanFactory#doResolveDependency
获取type和@value
@value 的spring表达式会扫描环境变量,启动参数,
类型转换器
通过名字找到bean
org.springframework.beans.factory.support.DefaultListableBeanFactory#findAutowireCandidates
找到多个,把所有找到的bean放入Map中
org.springframework.beans.factory.support.DefaultListableBeanFactory#determineAutowireCandidate
先找@Primary,然后是判断实现OrderComparator的优先级,最后通过名字确定唯一的Bean
@Qualifier的使用
通过注解实现接口不同实现类的切换
@Component
@Qualifier("roundRobin")
public class RoundRobinStrategy implements LoadBalance{
@Override
public String select() {
return null;
}
}
@Component
@Qualifier("random")
public class RandomStrategy implements LoadBalance{
@Override
public String select() {
return null;
}
}
public interface LoadBalance {
String select();
}
@Component
public class UserService {
@Autowired
@Qualifier("roundRobin")
private LoadBalance loadBalance;
}