24IoC容器的依赖注入.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
24IoC容器的依赖注入

在 cglibSubclassingInstantiationStrategy 中我们可以看到具体的实例化过程和cglib 的使用方法,这里就不对 cglib 的使用进行过多的阐述了。如果读者有兴趣,可以去阅读cglib 的使用文档,不过这里的 Spring 代码可以为使用 cglib 提供很好的参考。这里的Enhancer 类,已经是 cglib 的类了,通过这个 Enhancer 来完成 Java 对象的生成,使用的是Enhancer的create方法。如代码清单2-26所示。 代码清单2-26? 使用cglib的Enhancer生成Java对象 public?Object?instantiate(Constructor?ctor,?Object[]?args)?{? ? Enhancer?enhancer?=?new?Enhancer();? ? enhancer.setSuperclass(this.beanDefinition.getBeanClass());? ? enhancer.setCallbackFilter(new?CallbackFilterImpl());? ? enhancer.setCallbacks(new?Callback[]?{????NoOp.INSTANCE,??? ? new?LookupOverrideMethodInterceptor(),????new? ReplaceOverrideMethodInterceptor()??});? ? //使用cglib的create生成实例化的bean对象。??return?(ctor?== ? null)???????enhancer.create()?:?? ? enhancer.create(ctor.getParameterTypes(),?args);?}? 在实例化 Bean 对象生成的基础上,我们看看 Spring 是怎样对这些对象进行处理的,也就是Bean 对象生成以后,怎样把这些 Bean 对象的依赖关系设置好,完成整个依赖注入过程。这里涉及对各种 Bean 对象的属性的处理过程(即依赖关系处理的过程),这些依赖关系处理的依据就是已经解析得到的 BeanDefinition。详细地了解这个过程,需要回到前面的 populateBean 方法,这个方法在AbstractAutowireCapableBeanFactory中的实现如代码清单2-27所示。 代码清单2-27? populateBean的实现 protected?void?populateBean(String?beanName, ? AbstractBeanDefinition?mbd,?BeanWrapper?bw)?{??/**? ? *这里取得在BeanDefinition中设置的property值,这些property来 ? 自对??*BeanDefinition的解析。??*/? ? //具体的解析过程可以参看载入和解析BeanDefinition的分析。? ? PropertyValues?pvs?=?mbd.getPropertyValues();??if?(bw?== ? null)?{???if?(!pvs.isEmpty())?{????throw?new? BeanCreationException(??????mbd.getResourceDescription(), ? beanName,?Cannot?apply?property?????values?to?null? instance);???}???else?{????//?Skip?property?population ? phase?for?null?instance.????return;???}??}??/**??*?Give?any ? InstantiationAwareBeanPostProcessors?the?opportunity?to ? modify?the??*?state?of?the?bean?before?properties?are?set. ? This?can?be?used,?for?example,??*?to?support?styles?of?field ? injection.??*/??boolean?continueWithPropertyPopulation?= ? true;??if?(!mbd.isSynthetic()? ? hasInstantiationAwareBeanPostProcessors())?{???for? (BeanPostProcessor?bp?:?getBeanPostProcess

文档评论(0)

juhui05 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档