当前位置: 首页 > news >正文

荣成市建设局网站是什么菏泽 做网站 多少钱

荣成市建设局网站是什么,菏泽 做网站 多少钱,深圳开发网站建设,网站 数据库+1Spring中的Bean实例化对象#xff0c;需要构造方法 通常一个类只有一个构造方法#xff1a; 1、无参的构造方法#xff0c;实例化只能选择这一个 2、有参的构造方法 使用AnnotationConfigApplicationContext#xff0c;会使用这个构造方法进行实例化#xff0c;Spring根…Spring中的Bean实例化对象需要构造方法 通常一个类只有一个构造方法 1、无参的构造方法实例化只能选择这一个 2、有参的构造方法 使用AnnotationConfigApplicationContext会使用这个构造方法进行实例化Spring根据构造方法的参数信息去寻找Bean然后传给构造方法 使用ClassPathXmlApplicationContext表示使用XML的方式来使用bean。在XML中指定手动指定构造方法的参数值或者配置autowireconstructor让Spring自动去寻找bean做为构造方法参数值。 多个构造方法情况 1、如果开发者指定了想要使用的构造方法那么就用这个构造方法 xml中的constructor-arg标签表示构造方法参数可以根据这个确定想要使用的构造方法的参数个数从而确定想要使用的构造方法直接指定了构造方法的参数值 通过Autowired注解Autowired注解可以写在构造方法上表示开发者想使用哪个构造方法其实是Spring通过byTypebyName选择具体哪一个构造方法 2、如果开发者没有指定想要使用的构造方法则看开发者有没有让Spring自动选择构造方法 只能在ClassPathXmlApplicationContext中使用可以在xml中指定某个bean的autowire为constructor通过构造方法自动注入 3、如果开发者也没有让Spring自动选择构造方法则Spring利用无参构造方法如果没有无参构造方法则报错 注意多个构造方法上写了Autowired注解会报错。Autowired的属性required默认为ture Autowired或Autowiredrequiredtrue有多个会报错 但是Autowiredrequiredfalse可以有多个 源码思路 1、AbstractAutowireCapableBeanFactory类中的createBeanInstance()方法会去创建一个Bean实例 2、根据BeanDefinition加载类得到Class对象 3、如果BeanDefinition绑定了一个Supplier那就调用Supplier的get方法得到一个对象并直接返回 4、如果BeanDefinition中存在factoryMethodName那么就调用该工厂方法得到一个bean对象并返回 5、如果BeanDefinition已经自动构造过了那就调用autowireConstructor()自动构造一个对象 6、调用SmartInstantiationAwareBeanPostProcessor的determineCandidateConstructors()方法得到哪些构造方法是可以用的 7、存在可用得构造方法当前BeanDefinition的autowired是 AUTOWIRE_CONSTRUCTORBeanDefinition中指定了构造方法参数值创建Bean的时候指定了构造方法参数值符合这几种就调用autowireConstructor()方法自动构造一个对象 8、最后如果不是上述情况就根据无参的构造方法实例化一个对象 autowireConstructor() 1、先检查是否指定了具体的构造方法和构造方法参数值或者在BeanDefinition中缓存了具体的构造方法或构造方法参数值如果存在那么则直接使用该构造方法进行实例化 2、如果没有确定的构造方法或构造方法参数值那么 a如果没有确定的构造方法那么则找出类中所有的构造方法 b如果只有一个无参的构造方法那么直接使用无参的构造方法进行实例化 c如果有多个可用的构造方法或者当前Bean需要自动通过构造方法注入 d根据所指定的构造方法参数值确定所需要的最少的构造方法参数值的个数 e对所有的构造方法进行排序参数个数多的在前面 f遍历每个构造方法 g如果不是调用getBean方法时所指定的构造方法参数值那么则根据构造方法参数类型找值 h如果是调用getBean方法时所指定的构造方法参数值就直接利用这些值 i如果根据当前构造方法找到了对应的构造方法参数值那么这个构造方法就是可用的但是不一定这个构造方法就是最佳的所以这里会涉及到是否有多个构造方法匹配了同样的值这个时候就会用值和构造方法类型进行匹配程度的打分找到一个最匹配的 为什么分越少优先级越高 主要看计算找到的bean和构造方法参数类型匹配程度有多高 假设bean的类型为AA的父类是BB的父类是C同时A实现了接口D 如果构造方法的参数类型为A那么完全匹配得分为0 如果构造方法的参数类型为B那么得分为2 如果构造方法的参数类型为C那么得分为4 如果构造方法的参数类型为D那么得分为1 Object[] objects new Object[]{new A()}; // 0 System.out.println(MethodInvoker.getTypeDifferenceWeight(new Class[]{A.class}, objects)); // 2 System.out.println(MethodInvoker.getTypeDifferenceWeight(new Class[]{B.class}, objects)); // 4 System.out.println(MethodInvoker.getTypeDifferenceWeight(new Class[]{C.class}, objects)); // 1 System.out.println(MethodInvoker.getTypeDifferenceWeight(new Class[]{D.class}, objects)); 可以发现越匹配分数越低 Bean的情况 首先Spring会把Bean修饰的方法解析成BeanDefinition 1、如果方法是static的那么解析出来的BeanDefinition中 factoryBeanName为AppConfig所对应的beanName比如appConfig factoryMethodName为对应的方法名比如aService . factoryClass为AppConfig.class 2、如果方法不是static的那么解析出来的BeanDefinition中 factoryBeanName为null factoryMethodName为对应的方法名比如aService factoryClass也为AppConfig.class Bean生成的BeanDefinition中有一个重要的属性isFactoryMethodUnique表示factoryMethod是不是唯一的在普通情况下Bean生成的BeanDefinition的isFactoryMethodUnique为true但是如果出现了方法重载那么就是特殊的情况。 Bean public static AService aService() {return new AService(); }Bean public AService aService(BService bService) {return new AService(); } 注意上面这种情况只会生成一个aService的Bean 假设Spring先解析到第一个Bean会生成一个BeanDefinition此时isFactoryMethodUnique为true但是解析到第二个Bean时会判断出来beanDefinitionMap中已经存在一个aService的BeanDefinition了那么会把之前的这个BeanDefinition的isFactoryMethodUnique修改为false并且不会生成新的BeanDefinition 后续在根据BeanDefinition创建Bean时会根据isFactoryMethodUnique来操作如果为 true那就表示当前BeanDefinition只对应了一个方法那也就是只能用这个方法来创建Bean了 但是如果isFactoryMethodUnique为false那就表示当前BeanDefition对应了多个方法需要和推 断构造方法的逻辑一样去选择用哪个方法来创建Bean。
http://www.huolong8.cn/news/280691/

相关文章:

  • 广州品牌网站设计价格wordpress报名收费
  • 做网站空间费用是什么意思网络优化的基本方法
  • 网站建设实训报告建议wordpress ajax error
  • 夸克作文网站网站服务器地址怎么查询
  • 自己给公司做网站难不难黄山旅游网页设计作业
  • 制作自助网站萧山网站建设xssem
  • 包装设计网站官网网站添加地图
  • 动易网站后台公司网站备案网站名称有什么用
  • 用插件做网站wordpress更改自定义文章页面
  • 点击进入官方网站医院网站建设趋势
  • 西宁网站建设百度怎么发自己的小广告
  • 搜索引擎优化的方式seo点击排名软件哪里好
  • 上外贸网站建设wordpress网页不存在
  • 什么是网站栏目标题wordpress分页导航不显示不出来
  • 网站建设计入到什么科目大连做网站的科技公司
  • 智慧农业项目方案seo优化排名易下拉用法
  • 浙江省建设厅举报网站163 com邮箱注册
  • 东莞网络公司网站建设烟台做网站需要多少钱
  • 怎么用linux做网站服务器吗大兴安岭地网站seo
  • 网站的花费p2p免费网站建设
  • 适合seo优化的网站制作渭南软件开发
  • 网站描述范例erp网站建设方案
  • 做外贸网站平台有哪些内容百度推广要企业自己做网站吗
  • 诸暨网站制作哪些公司制作如何在阿里云云服务器上搭建网站
  • 商务网站规划设计要点广告代理商
  • 网站域名如何管理个人网页设计欣赏作品
  • 深圳最好用的网站设计急招上午半天班女工
  • 青岛新公司网站建设推广山东泰安是几线城市
  • 网站页头尺寸上海做网站备案要多久
  • 富阳设计网站wordpress插件打不开