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

网站制作有限除了百度指数还有哪些指数

网站制作有限,除了百度指数还有哪些指数,网站用什么软件做,软件设计流程图基于Autowired的依赖注入底层原理 基于Resource注解底层工作流程图#xff1a; 1 Spring中到底有几种依赖注入的方式#xff1f; 首先分两种#xff1a; 手动注入 自动注入 1.1 手动注入 在XML中定义Bean时#xff0c;就是手动注入#xff0c;因为是程序员手动给某…基于Autowired的依赖注入底层原理 基于Resource注解底层工作流程图 1 Spring中到底有几种依赖注入的方式 首先分两种 手动注入 自动注入 1.1 手动注入 在XML中定义Bean时就是手动注入因为是程序员手动给某个属性指定了值。 而手动注入在细分来看可以分为 set方法注入构造方法注入 set方法进行注入示例 bean nameuserService classcom.luban.service.UserServiceproperty nameorderService reforderService/ /bean构造方法进行注入示例 bean nameuserService classcom.luban.service.UserServiceconstructor-arg index0 reforderService/ /bean1.2 自动注入 自动注入其实又分为两种 XML的autowire自动注入Autowired注解的自动注入 1.2.1 XML的autowire自动注入 在XML中我们可以在定义一个Bean时去指定这个Bean的自动注入模式byTypebyNameconstructor 如下示例 bean iduserService classcom.luban.service.UserService autowirebyType/这么写表示Spring会自动的给userService中所有的属性自动赋值不需要这个属性上有Autowired注解但需要这个属性有对应的set方法。 在创建Bean的过程中在填充属性时Spring会去解析当前类把当前类的所有方法都解析出来Spring会去解析每个方法得到对应的PropertyDescriptor对象PropertyDescriptor中有几个属性 name这个name并不是方法的名字而是拿方法名字进过处理后的名字 如果方法名字以“get”开头比如“getXXX”,那么nameXXX 如果方法名字以“is”开头比如“isXXX”,那么nameXXX 如果方法名字以“set”开头比如“setXXX”,那么nameXXX readMethodRef表示get方法的Method对象的引用 readMethodName表示get方法的名字 writeMethodRef表示set方法的Method对象的引用 writeMethodName表示set方法的名字 propertyTypeRef如果有get方法那么对应的就是返回值的类型如果是set方法那么对应的就是set方法中唯一参数的类型 get方法的定义是 方法参数个数为0个并且 方法名字以get开头 或者 方法名字以is开头并且方法的返回类型为boolean **set方法的定义是**方法参数个数为1个并且 方法名字以set开头并且方法返回类型为void 所以 Spring在通过byName的自动填充属性时流程是 找到所有set方法所对应的XXX部分的名字 根据XXX部分的名字去获取bean Spring在通过byType的自动填充属性时流程是 获取到set方法中的唯一参数的参数类型并且根据该类型去容器中获取bean如果找到多个会报错。 分析了autowire的byType和byName情况那么接下来分析constructorconstructor表示通过构造方法注入其实这种情况就比较简单了没有byType和byName那么复杂。 如果是constructor那么就可以不写set方法了当某个bean是通过构造方法来注入时spring利用构造方法的参数信息从Spring容器中去找bean找到bean之后作为参数传给构造方法从而实例化得到一个bean对象并完成属性赋值属性赋值的代码得程序员来写。 其实构造方法注入相当于byTypebyName普通的byType是根据set方法中的参数类型去找bean找到多个会报错而constructor就是通过构造方法中的参数类型去找bean如果找到多个会根据参数名确定。 1.2.2 Autowired注解的自动注入 Autowired注解是byType和byName的结合。 Autowired注解可以写在 属性上先根据属性类型去找Bean如果找到多个再根据属性名确定一个 构造方法上先根据方法参数类型去找Bean如果找到多个再根据参数名确定一个 set方法上先根据方法参数类型去找Bean如果找到多个再根据参数名确定一个 即属性注入set方法注入构造方法注入 2 寻找注入点过程 在创建一个Bean的过程中Spring会利用AutowiredAnnotationBeanPostProcessor的**postProcessMergedBeanDefinition()**找出注入点并缓存找注入点的流程为 1 遍历当前类的所有的属性字段Field 2 查看字段上是否存在Autowired、Value、Inject中的其中任意一个存在则认为该字段是一个注入点 3 如果字段是static的则不进行注入 4 获取Autowired中的required属性的值 5 将字段信息构造成一个AutowiredFieldElement对象作为一个注入点对象添加到currElements集合中。 6 遍历当前类的所有方法Method 7 判断当前Method是否是桥接方法如果是找到原方法 8 查看方法上是否存在Autowired、Value、Inject中的其中任意一个存在则认为该方法是一个注入点 9 如果方法是static的则不进行注入 10 获取Autowired中的required属性的值 11 将方法信息构造成一个AutowiredMethodElement对象作为一个注入点对象添加到currElements集合中。 12 遍历完当前类的字段和方法后将遍历父类的直到没有父类。 13 最后将currElements集合封装成一个InjectionMetadata对象作为当前Bean对于的注入点集合对象并缓存。 问题 static的字段或方法为什么不支持 当类加载器加载静态变量时Spring的上下文环境还没有被加载。 这是因为初始化类的加载顺序导致的程序启动时会加载根路径下所有的类不管这个类是否会用到都会去加载会先初始化静态变量和执行静态代码块这时候无法创建对象而autowired是要注入一个对象。 3 注入点进行注入 Spring在AutowiredAnnotationBeanPostProcessor的**postProcessProperties()**方法中会遍历所找到的注入点依次进行注入。 ​ 3.1 字段注入 1遍历所有的AutowiredFieldElement对象。 2 将对应的字段封装为DependencyDescriptor对象。 3 调用BeanFactory的resolveDependency()方法传入DependencyDescriptor对象进行依赖查找找到当前字段所匹配的Bean对象。 4将DependencyDescriptor对象和所找到的结果对象beanName封装成一个ShortcutDependencyDescriptor对象作为缓存比如如果当前Bean是原型Bean那么下次再来创建该Bean时就可以直接拿缓存的结果对象beanName去BeanFactory中去那bean对象了不用再次进行查找了 5 利用反射将结果对象赋值给字段。 3.2 Set方法注入 1 遍历所有的AutowiredMethodElement对象 2 遍历将对应的方法的参数将每个参数封装成MethodParameter对象 3 将MethodParameter对象封装为DependencyDescriptor对象 4调用BeanFactory的resolveDependency()方法传入DependencyDescriptor对象进行依赖查找找到当前方法参数所匹配的Bean对象。 5 将DependencyDescriptor对象和所找到的结果对象beanName封装成一个ShortcutDependencyDescriptor对象作为缓存比如如果当前Bean是原型Bean那么下次再来创建该Bean时就可以直接拿缓存的结果对象beanName去BeanFactory中去那bean对象了不用再次进行查找了 6 利用反射将找到的所有结果对象传给当前方法并执行。
http://www.yutouwan.com/news/52714/

相关文章:

  • 建站教程新手怎么做网站phpwordpress怎么在首页添加友情链接
  • 南通网站建设方案书英文网站建设运营
  • 贵港网站建设代理网站免费观看永久视频下载
  • 使用ftp修改网站图片成都网络营销精英
  • 西安网站免费制作廊坊营销型网站建设
  • 河北平台网站建设价位织梦做的网站_别人提交给我留的言我去哪里看
  • 如何设置免费网站域名买了怎么做网站
  • WordPress生成网站地图正版电子书做的最好的网站
  • 移动端网站制作案例网站开发结构
  • html网站注册页面渠道网官网
  • 丰台网站建设是什么账号权重查询入口
  • 服装商城网站建设制作小视频
  • 怎么搭建自己公司网站做服装外单的网站
  • 服装电子商务网站有哪些做网页的网站叫什么软件
  • 自己可以做开奖网站吗wordpress 可以商业
  • 网站生成软件app制作做软件需要网站吗
  • 四川学校网站建设有个网站是做视频相册的
  • 网站做淘宝联盟网站在线咨询模块
  • 用servlet做外卖网站网络平台推广宣传方案
  • 福田皇岗社区做网站wordpress插件汉化下载地址
  • 开发新闻类网站如何看网站是用什么程序做的
  • 网站开发 网站设计网站图片怎么做
  • 丽水网站建设哪家好网站推广实施方案
  • 做网站的意义重庆集团公司网站建设
  • 做海外网站的公司重庆市建设工程造价信息
  • 北京网站建设找降龙用asp做网站的流程
  • 青海省网站建设公司哪家好外贸运营推广方式
  • 毕业设计网站怎么做大连建站费用
  • 网络营销做得比较成功的案例优化方案怎么写
  • 违章建设举报网站常用的软件开发平台