首页 > 其他分享 >随堂笔记5-spring依赖注入

随堂笔记5-spring依赖注入

时间:2023-02-09 17:56:08浏览次数:61  
标签:xml 对象 spring 随堂 笔记 Bean bean 注入

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

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

1675910116609

1675910154323

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

手动注入

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

自动注入

  1. xml的autowire 自动注入

    1. byType set里的变量的属性
    2. byName set后面的名字
    3. constructor
    4. default 用bean标签里的autowire
    5. no 关闭autowired
  2. @Autowired注解注入

    1. 和xml差不多,只是更细粒度的控制,比如可以指定用哪个构造方法
  3. static的字段或方法为什么不支持

    ​ 这俩个bean都是原型bean,orderservice也是原型bean,userService1 和 userService2创建好了之后,分别注入 static orderService,结果orderSerivce的值变了,从而导致问题;遂spring禁制

  4. 注入点注入

    1. spring在AutowiredAnnotationBeanPostProcessor的postProcessorProperties()方法中,遍历找到的所有注入点依次注入。

    2. 遍历字段注入

    3. 调用beanfactory的resolveDependency方法,传入dependencyDescriptor对象,进行以来查找,匹配当前字段对应的bean对象

    4. DependencyDescriptor对象和所找到的结果对象beanName封装成一个

      ShortcutDependencyDescriptor对象作为缓存,比如如果当前Bean是原型Bean,那么下次

      再来创建该Bean时,就可以直接拿缓存的结果对象beanName去BeanFactory中去那bean对象

      了,不用再次进行查找了

      1. 利用反射将结果对象赋值给字段。
  5. Set方法注入

    \1. 遍历所有的AutowiredMethodElement对象

    \2. 遍历将对应的方法的参数,将每个参数封装成MethodParameter对象

    \3. 将MethodParameter对象封装为DependencyDescriptor对象

    \4. 调用BeanFactory的resolveDependency()方法,传入DependencyDescriptor对象,进行依

    赖查找,找到当前方法参数所匹配的Bean对象。

    \5. 将DependencyDescriptor对象和所找到的结果对象beanName封装成一个

    ShortcutDependencyDescriptor对象作为缓存,比如如果当前Bean是原型Bean,那么下次

    再来创建该Bean时,就可以直接拿缓存的结果对象beanName去BeanFactory中去那bean对象

    了,不用再次进行查找了

    \6. 利用反射将找到的所有结果对象传给当前方法,并执行

标签:xml,对象,spring,随堂,笔记,Bean,bean,注入
From: https://www.cnblogs.com/xiaoshahai/p/17106522.html

相关文章

  • echarts笔记2
    <template><div><h1>折线图常用配置项</h1><divid="line">折线图</div></div></template><script>import*asechartsfrom'echarts'exportdefa......
  • Spring Cloud Alibaba与Spring Cloud Netflix区别
      SpringCloudAlibaba与SpringCloudNetflix区别SpringCloudAlibaba的由来:从2014年开始,得益于以Docker为代表的容器化技术的成熟以及DevO......
  • springcloud(四) - 服务治理Hystrix
    功能介绍调用下游服务,下游因为超时、异常等原因报错的时候。hystrix保证不会出现整体异常,避免雪崩。主要策略是服务的熔断、降级 应用场景降级:异常、超时、熔断等情况......
  • springcloud(二) - 服务调用Feign&openFeign
    功能介绍:动态代理的方式,简化请求其他服务的开发成本,更好得对请求地址组装、接受返回信息、返回参数解析等  Feign和OpenFeign区别:OpenFeign实现了Feign的基础功能,同......
  • springboot生成图形验证码
    pom.xml<dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>2.3.2</versio......
  • springcloud(三) - 负载均衡Ribbon
    功能介绍基本保证每个服务不同的ip接收到的请求数量是一样的,确保在微服务下没有没有那个服务器负载过多而另外一个闲置。IRule:根据规则获取制定的服务  规则列表R......
  • springboot开发日记(9)——YAML配置文件
    YAML——适合用来做以数据为中心的配置文件基本语法使用缩进表示层级关系。缩进时不允许使用Tab键,只允许使用空格。(实际使用idea开发中,Tab也有效)缩进的空格数不重......
  • Linux基础课:第八章笔记--租云服务器及配环境
    最后一节课--完结撒花理解框架关系docker教程sudousermod-aGdocker$USER赋予用户sudo权限,加入到用户组中scp/var/lib/acwing/docker/images/docker_lesson_1_......
  • 四、SpringMVC的数据响应
    SpringMVC的数据响应方式页面跳转直接返回字符串通过ModelAndView对象返回回写数据直接返回字符串返回对象或集合页面跳转返回字符串形式直接返回字符串:......
  • spring学习笔记
    本文档适用于使用过Spring的开发者,该文章有助于他们重新梳理一下对Spring的认识。      这篇文章是本人在项目开发中使用Spring的总结,这里只是归纳了我们在开发中......