0
点赞
收藏
分享

微信扫一扫

随堂笔记5-spring依赖注入

Raow1 2023-04-03 阅读 115

转载别人的图:依赖注入底层原理流程图:

https://www.processon.com/view/link/5f899fa5f346fb06e1d8f570

随堂笔记5-spring依赖注入_缓存

随堂笔记5-spring依赖注入_缓存_02

spring的依赖注入分为手动注入与自动注入

手动注入

  1. xml指定属性 通过set注入
  2. xml指定构造器,通过构造器注入

自动注入

  1. xml的autowire 自动注入
  1. byType set里的变量的属性
  2. byName set后面的名字
  3. constructor
  4. default 用bean标签里的autowire
  5. no 关闭autowired
  1. @Autowired注解注入
  1. 和xml差不多,只是更细粒度的控制,比如可以指定用哪个构造方法
  1. static的字段或方法为什么不支持
    这俩个bean都是原型bean,orderservice也是原型bean,userService1 和 userService2创建好了之后,分别注入 static orderService,结果orderSerivce的值变了,从而导致问题;遂spring禁制
  2. 注入点注入
  1. spring在AutowiredAnnotationBeanPostProcessor的postProcessorProperties()方法中,遍历找到的所有注入点依次注入。
  2. 遍历字段注入
  3. 调用beanfactory的resolveDependency方法,传入dependencyDescriptor对象,进行以来查找,匹配当前字段对应的bean对象
  4. DependencyDescriptor对象和所找到的结果对象beanName封装成一个
    ShortcutDependencyDescriptor对象作为缓存,比如如果当前Bean是原型Bean,那么下次
    再来创建该Bean时,就可以直接拿缓存的结果对象beanName去BeanFactory中去那bean对象
    了,不用再次进行查找了
  1. 利用反射将结果对象赋值给字段。
  1. Set方法注入
    \1. 遍历所有的AutowiredMethodElement对象
    \2. 遍历将对应的方法的参数,将每个参数封装成MethodParameter对象
    \3. 将MethodParameter对象封装为DependencyDescriptor对象
    \4. 调用BeanFactory的resolveDependency()方法,传入DependencyDescriptor对象,进行依
    赖查找,找到当前方法参数所匹配的Bean对象。
    \5. 将DependencyDescriptor对象和所找到的结果对象beanName封装成一个
    ShortcutDependencyDescriptor对象作为缓存,比如如果当前Bean是原型Bean,那么下次
    再来创建该Bean时,就可以直接拿缓存的结果对象beanName去BeanFactory中去那bean对象
    了,不用再次进行查找了
    \6. 利用反射将找到的所有结果对象传给当前方法,并执行

不恋尘世浮华,不写红尘纷扰



举报

相关推荐

0 条评论