Spring源码解析-autowiring自动装配的实现
2017-11-12 22:21
573 查看
IoC容器提供了自动依赖装配的方式,为应用IoC容器提供很大的方便。在自动配置中,不需要显式的去指定Bean属性,只需要配置autowiring属性,IoC容器会根据这个属性配置,使用反射的方式查找属性的类型或者名字,然后基于类型或名字来自动匹配IoC中的Bean,从而完成自动注入的工作。
自动依赖注入的实现部分在AbstractAutowireCapableBeanFactory中的populateBean方法中
对autowireMode进行判断后分别调用autowireByName和autowireByType进行注入。
自动依赖注入的实现部分在AbstractAutowireCapableBeanFactory中的populateBean方法中
//进行依赖注入 if (mbd.getResolvedAutowireMode() == RootBeanDefinition.AUTOWIRE_BY_NAME || mbd.getResolvedAutowireMode() == RootBeanDefinition.AUTOWIRE_BY_TYPE) { MutablePropertyValues newPvs = new MutablePropertyValues(pvs); //根据名字注入 // Add property values based on autowire by name if applicable. if (mbd.getResolvedAutowireMode() == RootBeanDefinition.AUTOWIRE_BY_NAME) { autowireByName(beanName, mbd, bw, newPvs); } //根据类型注入 // Add property values based on autowire by type if applicable. if (mbd.getResolvedAutowireMode() == RootBeanDefinition.AUTOWIRE_BY_TYPE) { autowireByType(beanName, mbd, bw, newPvs); } pvs = newPvs; }
对autowireMode进行判断后分别调用autowireByName和autowireByType进行注入。
protected void autowireByName( String beanName, AbstractBeanDefinition mbd, BeanWrapper bw, MutablePropertyValues pvs) { String[] propertyNames = unsatisfiedNonSimpleProperties(mbd, bw); for (String propertyName : propertyNames) { if (containsBean(propertyName)) { //使用当前Bean的属性名,在IoC容器中获取对应的bean,让将获取的bean设置为当前的Bean的属性值。 Object bean = getBean(propertyName); pvs.add(propertyName, bean); registerDependentBean(propertyName, beanName); if (logger.isDebugEnabled()) { logger.debug("Added autowiring by name from bean name '" + beanName + "' via property '" + propertyName + "' to bean named '" + propertyName + "'"); } } else { if (logger.isTraceEnabled()) { logger.trace("Not autowiring property '" + propertyName + "' of bean '" + beanName + "' by name: no matching bean found"); } } } }
相关文章推荐
- springboot源码解析:自己实现一个springboot自动配置
- spring boot 源码解析40-CounterService,GaugeService默认自动装配解析
- Spring的Autowired自动装配(XML版本+Annotation版本+源码+解析)
- Spring自动装配解析
- 使用spring注解 自动装配以及自动扫描机制 实现零xml配置的前提
- Spring源码解析-IOC容器的实现
- Spring中使用构造函数实现Beans自动装配
- 【Spring源码--IOC容器的实现】(三)BeanDefinition的载入和解析【I】
- Spring源码解析-容器的基本实现
- spring bean装配(bean的作用域、bean的生命周期、Aware接口、Bean的自动装配Autowiring、资源文件Resources )
- 使用spring注解 自动装配以及自动扫描机制 实现零xml配置的前提
- SPRING源码学习之路(三)——<aop:config>自动代理的实现
- 【Spring源码】从源码实现的角度解析spring的InitializingBean的afterPropertiesSet方法和init-method区别和应用
- Spring-Session实现Session共享实现原理以及源码解析
- Java的注解机制——Spring自动装配的实现原理
- Spring中使用byName实现Beans自动装配
- Java的注解机制——Spring自动装配的实现原理
- Java的注解机制——Spring自动装配的实现原理
- Spring mybatis源码篇章-NodeHandler实现类具体解析保存Dynamic sql节点信息
- Spring Beans 自动装配 使用XML配置列子(带源码)